我想使用Shell脚本定期将数据库转储到远程托管站点上。不幸的是,服务器被锁定得很紧,没有mysqldump
安装,二进制文件不能由普通用户/主目录执行(所以我自己不能“安装”它)并且数据库位于单独的服务器上,所以我无法直接抓取文件。
我唯一能做的就是通过SSH登录到Web服务器,并使用mysql
命令行客户端建立与数据库服务器的连接。如何将内容转储为mysqldump
SQL格式的文件名?
奖励:如果可能,如何将内容直接转储到SSH连接的末端?
我喜欢下面提出的SSH隧道概念,但是,我需要对其加倍隧道。
localhost -> remote web server -> remote database server
这样可以正常工作:
$ ssh -f -L 3306:mysql.example.com:3306 user@ssh.example.com -N
但是,尝试登录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
我猜它期望用户凭据是'user'@'mysql.example.com'
。如何哄骗它使用它而不是“真实”主机?
好的,我可以通过添加127.0.0.1 mysql.example.com
到hosts文件并通过进行连接来使其工作mysqldump -P 3306 -h mysql.example.com -u user -p db
。问题解决了!我仍然对不需要我编辑主机文件的解决方案感兴趣。
'user'@'localhost'
除了的权限'user'@'mysql.example.com'
,而不是编辑hosts文件。