如何在没有mysqldump的情况下转储远程数据库?

dec*_*eze 8 mysql backup

我想使用 shell 脚本定期将数据库转储到我的远程托管站点上。不幸的是,服务器被锁定得很紧,没有mysqldump安装,二进制文件不能被普通用户/在主目录中执行(所以我不能自己“安装”它)并且数据库位于一个单独的服务器上,所以我不能直接抓取文件。

我唯一能做的就是通过 SSH 登录到网络服务器并使用mysql命令行客户端建立到数据库服务器的连接。如何将内容转储到mysqldumpSQL 格式的文件中?
奖励:如果可能,我如何将内容直接转储到 SSH 连接的一端?


我喜欢下面提出的 SSH 隧道的想法,但是,我需要双隧道它。

localhost -> remote web server -> remote database server
Run Code Online (Sandbox Code Playgroud)

这工作正常:

$ ssh -f -L 3306:mysql.example.com:3306 user@ssh.example.com -N
Run Code Online (Sandbox Code Playgroud)

但是,尝试登录mysql失败:

$ mysqldump -P 3306 -h localhost -u user -p db
Enter password: 
mysqldump: Got error: 1045: Access denied for user 'user'@'localhost'
   (using password: YES) when trying to connect
Run Code Online (Sandbox Code Playgroud)

我猜它希望用户凭据是'user'@'mysql.example.com'. 我怎样才能哄它使用它而不是“真正的”主机?


好的,我通过添加127.0.0.1 mysql.example.com到我的主机文件并通过mysqldump -P 3306 -h mysql.example.com -u user -p db. 问题解决了!我仍然对不需要我编辑主机文件的解决方案感兴趣。

chm*_*eee 15

您可以设置 ssh 隧道并mysqldump在本地计算机上使用。

ssh -f -L 3306:localhost:3306 user@remoteserver -N
mysqldump -P 3306 -h localhost -u dbuser dbname
Run Code Online (Sandbox Code Playgroud)