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

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

我testing了很多,我发现错误是由于密码中的特殊字符造成的。 由于我从.my.cnf文件获取密码,因此无法通过对转义字符进行硬编码来将其转义。

任何人都可以为我提供一种方法,可能search$ passwordvariables中的这些特殊字符,并添加到那些转义斜线(“\”)。

编辑:我忘了提及,我通过使用vzctl exec命令通过OpenVZ部分虚拟化执行这是为什么我需要一个方法,将允许我逃离特殊字符,我已经要求的原因。 我有开发人员的方法是简单的使用sed命令:

 sed 's/[!-+]/\\&/g' 

感谢大家的帮助。

最好的祝福!

你不需要做任何这个。 正如HBruijn在评论中提到的, $HOME/.my.cnf文件已经包含了你的凭证,MySQL的命令行工具将自动使用它们,而不需要做任何特殊的事情。

所以只要做:

 mysqldump $db | ssh root@$destination_server "cat > /backup/mysql/$db.sql"