使用 mysqldump 查找 mysql 密码中的特殊字符

使用 mysqldump 查找 mysql 密码中的特殊字符

我有以下 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"

相关内容