SSH + MysqlDump 远程备份脚本

SSH + MysqlDump 远程备份脚本

我正在尝试发出一个远程 mysqldump 命令,将 stdout 重定向到 dmp 文件,然后将其打包。

我有点困惑如何通过 ssh 执行重定向位:

IE

ssh [email protected] mysqldump $dbname -u admin -p > dbdump.dmp && tar cvzf dbdump.tar.gz dbdump.dmp

问题:

1) 我没有提供密码,因为我希望它提示我。 ssh 远程命令会处理这个问题吗? 2) 语法有什么问题? 我想使用引号吗? 重定向和管道会发生什么? 这些是否必须以某种特殊方式进行转义或格式化。

答案1

当您连接到另一台主机时,SSH 会在服务器端执行给定的命令(如果没有指定,它会启动一个 shell),转发所有 stdin/stdout/stderr 流。该ssh命令以 结束>。这意味着 mysql 命令的输出被重定向到文件dbdump.dmp 在客户端。然后,仍然在客户端,从该文件创建一个 tar 档案。

如果您像 Dom 建议的那样将整个命令字符串放在引号中,它将完全在远程端运行,这样您就可以在服务器上拥有这些文件。

理论上,密码也应该可以工作(因为 stdin 流没有被重定向而只是被传递),但在这里却不行。

你可以输入密码在里面.my.cnf(如果您需要额外的安全性,请创建一个额外的用户仅用于备份)。您也可以使用公钥登录对于该帐户,这样它就可以完全无需您的交互即可工作。

顺便问一下:为什么要创建转储的 tar 存档?如果您只需要压缩,gzip或者类似的东西就完全足够了。

答案2

您希望在哪台计算机上执行 tar?如果在服务器上,则需要引用所有行,例如: 如果不这样做,我认为行尾将在本地执行,并且由于您没有 dbdump 文件,因此无法正常工作。对于 1),没有问题。如果需要密码,则会询问。[编辑] 哎呀,我再三检查,您说的是 MySQL 密码,而不是 SSH 密码!但我认为会询问 [编辑2] 只需检查,它就可以与引号一起使用:首先询问 SSH 密码,然后询问 MySQL 密码ssh [email protected] "mysqldump $dbname -u admin -p > dbdump.dmp && tar cvzf dbdump.tar.gz dbdump.dmp"

答案3

这对我有用(经过几次测试):

ssh -t kom "mysql -uroot -p -e 'show databases;'"
ssh -t kom "mysql -uroot -p < /home/ling/websites/jin_test/.deploy/tmp.sql"

“技巧”是命令周围的引号。

-t选项允许通过远程 shell 以交互方式提示密码。

科姆这里只是我的 ssh 配置标识符定义〜/.ssh /配置文件(更多内容请见此处:https://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/)。

相关内容