我有以下 ssh 脚本:
#Here I am getting the mysql password for the root user
password=$(cat /root/.my.cnf | grep "password" | awk -F\" '{print $2}')
#here I am trying to dump the database remotely
mysqldump -uroot -p$password $db | ssh root@$destination_server "cat > /backup/mysql/$db.sql"
问题是我收到了以下错误:
/bin/bash: -c: line 0: syntax error near unexpected token `)'
/bin/bash: -c: line 0: `mysqldump -uroot -pbyt)uy6 database_name '
我测试了很多次,发现错误是由于密码中的特殊字符引起的。由于我是从 .my.cnf 文件中获取密码的,因此无法通过硬编码转义字符来转义它。
有人可以提供一种方法让我在 $password 变量中搜索那些特殊字符并添加那些转义斜杠(“\”)。
编辑:我忘了说我是通过 OpenVZ 部分虚拟化使用 vzctl exec 命令来执行此操作的,这就是为什么我需要一种方法来让我按照要求转义特殊字符。我开发的方法是简单地使用 sed 命令:
sed 's/[!-+]/\\&/g'
感谢大家的帮助。
此致!
答案1
您无需执行任何操作。正如 HBruijn 在评论中提到的那样,该$HOME/.my.cnf
文件已包含您的凭据,MySQL 的命令行工具将自动使用它们,而无需您执行任何特殊操作。
所以只需这样做:
mysqldump $db | ssh root@$destination_server "cat > /backup/mysql/$db.sql"