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