来自远程服务器的mysqldump

Ela*_*dri 7 mysql pipe mysqldump

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

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

我试着找一个解决方案,但找不到这个确切的场景.

感谢任何帮助.

此致,很高兴

Kai*_*aii 5

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

$ ssh user@remote "mysqldump -h host -u username -p dbname" > dbname.sql
Run Code Online (Sandbox Code Playgroud)

使用此命令,mysqldump将其转储写入STDOUT,然后将其转储到本地Shell的STDOUT。随着> dbname.sql您将STDOUT流写入本地文件。

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

$ ssh user@remote "mysqldump -h host -u username -p dbname | gzip" | gunzip > dbname.sql
Run Code Online (Sandbox Code Playgroud)

您也可以使用管道来从备份中还原数据库:

$ gzip dbname.sql | ssh user@remote "gunzip | mysql -h host -u username -p dbname"
Run Code Online (Sandbox Code Playgroud)

或无需压缩即可远程还原(不建议):

$ dbname.sql > ssh user@remote "mysql -h host -u username -p dbname"
Run Code Online (Sandbox Code Playgroud)


Wyz*_*a-- 3

您可以使用 SSH 的隧道功能:

ssh server-x -L 12345:remote-db-server:3306
Run Code Online (Sandbox Code Playgroud)

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

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