远程使用mysqldump以及正确理解ssh tunnel

在我的remote_server上安装有mysql服务,其使用3306端口。 使用mysqldump命令可以backup数据库到sql文件。比如:

mysqldump -P 3310 -h 127.0.0.1 -u root -p database_name > dump_file.sql

这段命令的意思是,登陆到host(-h)127.0.0.1(本地?没错,通常我们使用mysqldump会登陆到远程mysql服务然后将备份文件dump到远程服务器。但是在这里,我们不想将文件放在远程服务器,我们想直接将文件传送回本地client。)并将mysqldump命令使用于127.0.0.1 的3310端口,进行数据的备份。

我们之所以可以这么做,是因为在执行这个命令之前我们使用了

ssh -f -L3310:localhost:3306 username@remote_server -N

这个命令来建立一个ssh 通道。这段命令的意思是,我从client来使用ssh建立到remot_server的连接,并且(-L)请将相对于remote_server来说的localhost以及localhost的3306端口映射到我client的3310端口。(-f 参数是要ssh连接后进入到后台,然后再client的命令行上就不会显示username@remote_server>) (-N 参数是说在ssh连接这时没有命令要执行了,即“只是用来forward port”)

Aha, 这样当我们在client的3310端口上执行mysqldump命令时,我们就相当于在"相对于remote_server来说的localhost的3306端口", 其实就是remote_server的3306端口执行mysqldump命令。而且mysqldump会返回数据到client的3310端口。

这样我们就实现了直接将remote database的备份直接拷贝到client了。


关于更多ssh tunnel的讨论见:http://chamibuddhika.wordpress.com/2012/03/21/ssh-tunnelling-explained

评论

此博客中的热门博文

Nu förbjuder Kina handel med elfenben

Fader av pingyins

Kineserna vill köpa Volvos kompetens