来自远程服务器的mysqldump

时间:2015-07-02 15:51:49

标签: mysql pipe mysqldump

我需要将mysql数据库从远程服务器复制到本地服务器。 我可以访问该数据库的唯一方法是使用ssh连接到远程计算机(让我们称之为X),然后从该计算机连接到mysql -h address -u username -p password的mysql。我的限制是我不能在运行数据库的mysql服务器上进行转储,也不能转储到计算机X(出于无法更改的管理原因)。

有没有办法告诉mysql直接转储到我的本地服务器? (也许使用PIPE,虽然我不熟悉它)。 值得一提的是,我的服务器在Ubuntu服务器上运行,X也在linux上运行。

我尝试寻找解决方案,但无法找到适合这种情况的内容。

感谢任何帮助。

此致 ELAD

2 个答案:

答案 0 :(得分:5)

您可以使用SSH的STDIN / STDOUT重定向功能:

$ ssh user@remote "mysqldump -h host -u username -p dbname" > dbname.sql

使用此命令,mysqldump将其转储写入STDOUT,STDOUT将重定向到本地shell的STDOUT。使用> dbname.sql,您可以将STDOUT流写入本地文件。

如果您愿意,您甚至可以通过gzip(或任何其他压缩工具)管道输出以减少带宽:

$ ssh user@remote "mysqldump -h host -u username -p dbname | gzip" | gunzip > dbname.sql

您也可以反过来使用管道从备份中恢复数据库:

$ gzip dbname.sql | ssh user@remote "gunzip | mysql -h host -u username -p dbname"

或者无需压缩即可远程恢复(不推荐):

$ dbname.sql > ssh user@remote "mysql -h host -u username -p dbname"

答案 1 :(得分:3)

您可以使用SSH的隧道功能:<​​/ p>

ssh server-x -L 12345:remote-db-server:3306

这将告诉SSH客户端侦听到本地计算机(您正在连接的端口)上的端口12345的TCP连接,并将它们作为从server-x到端口3306(默认MySQL)的连接进行中继remote-db-server上的服务器端口。

然后您可以在本地计算机上运行mysqldump,并告诉它连接到localhost端口12345.它实际上将连接到远程数据库服务器,从该服务器的角度来看看起来连接来自server-x