我需要将mysql数据库从远程服务器复制到本地服务器。
我可以访问该数据库的唯一方法是使用ssh连接到远程计算机(让我们称之为X),然后从该计算机连接到mysql -h address -u username -p password
的mysql。我的限制是我不能在运行数据库的mysql服务器上进行转储,也不能转储到计算机X(出于无法更改的管理原因)。
有没有办法告诉mysql直接转储到我的本地服务器? (也许使用PIPE,虽然我不熟悉它)。 值得一提的是,我的服务器在Ubuntu服务器上运行,X也在linux上运行。
我尝试寻找解决方案,但无法找到适合这种情况的内容。
感谢任何帮助。
此致 ELAD
答案 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
。