这是5年前“How to create a ssh tunnel in ruby and then connect to mysql server on the remote host”的后续问题。
我正在尝试在Ruby中创建SSH隧道,然后连接到远程MySQL数据库。我这样做是因为我需要从我的应用程序的旧版本移动一些旧数据,因此我不需要ActiveRecord,迁移等。
我正在使用NetSSHGateway gem和MySQL2 gem。
这是我的Ruby代码(在rails控制台中运行):
gateway = Net::SSH::Gateway.new('old_remote_server.com','server_username')
port = gateway.open('127.0.0.1', 3306, 3307)
client = Mysql2::Client.new(
host: "127.0.0.1",
username: 'database_username',
password: 'database_password',
database: 'database_name',
port: port
)
在最后一行之后,控制台挂起大约2分钟,然后给我错误:
Mysql2::Error: Lost connection to MySQL server at 'reading initial communication packet', system error: 0
我能够SSH到远程服务器,并以这种方式执行MySQL命令,所以我不确定这里是什么问题。
答案 0 :(得分:0)
经过一番思考,出于几个原因,这可能不是迁移数据的最佳方式。
最后,我简单地转储了我的遗留MySQL数据库,将其移至我的新应用环境,并使用MySQL2 gem构建rake任务来翻译并将数据移动到我的新应用中。