2015-07-02 74 views
5

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

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

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

感谢任何帮助。

问候, 埃拉德

+0

您可以尝试使用sshfs并在mysql服务器上映射一个远程文件夹(如果可访问,也许是您的本地PC)。然后将其用于转储。 (我假设你在使用linux mysql服务器) –

+0

你可以告诉ssh在远程机器上运行一个命令,然后将输出重定向到本地计算机上的一个文件 –

回答

3

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

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

这将告诉SSH客户端侦听在本地机器上的TCP连接到端口12345(你是我的唯一连接),并将它们作为server-xremote-db-server上的端口3306(默认MySQL服务器端口)的连接进行中继。

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

2

您可以使用SSH的标准输入/输出重定向功能:

$ ssh [email protected] "mysqldump -h host -u username -p dbname" > mylocalfile.sql 

使用此命令,mysqldump其转储写到标准输出,这将被重定向到您的本地shell的标准输出。用> mylocalfile.sql您将STDOUT流写入本地文件。