Ela*_*dri 7 mysql pipe mysqldump
我需要将mysql数据库从远程服务器复制到本地服务器.我可以访问该数据库的唯一方法是使用ssh连接到远程计算机(让我们称之为X),然后从该计算机连接到mysql mysql -h address -u username -p password.我的限制是我不能在运行数据库的mysql服务器上进行转储,也不能转储到计算机X(出于无法更改的管理原因).
有没有办法告诉mysql直接转储到我的本地服务器?(也许使用PIPE,虽然我不熟悉它).为了它的价值,我的服务器在Ubuntu服务器上运行,X也在linux上运行.
我试着找一个解决方案,但找不到这个确切的场景.
感谢任何帮助.
此致,很高兴
您可以使用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)
您可以使用 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.