【问题标题】:mysqldump from a remote server来自远程服务器的 mysqldump
【发布时间】:2015-07-02 15:51:48
【问题描述】:

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

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

我尝试寻找解决方案,但找不到适合这种确切情况的解决方案。

感谢任何帮助。

问候, 埃拉德

【问题讨论】:

  • 您可以尝试使用 sshfs 并在 mysql 服务器上映射一个远程文件夹(如果可以访问,可能是您的本地电脑)。然后将其用于转储。 (我假设您使用的是 linux mysql 服务器)
  • 您可以告诉 ssh 在远程计算机上运行命令,然后将输出重定向到本地计算机上的文件

标签: mysql pipe mysqldump


【解决方案1】:

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

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

使用此命令,mysqldump 将其转储写入 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"

【讨论】:

  • 用这种方法恢复怎么样?
  • @NathanQ 好吧,在管道的本地端,数据首先发送到gzip,然后发送到ssh,在远程服务器上然后发送到gunzip,最后到达目的地mysql(第三个例子)
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-12
    • 2012-11-15
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多