Sonderzeichen im MySQL-Passwort mit mysqldump

Sonderzeichen im MySQL-Passwort mit mysqldump

Ich habe das folgende SSH-Skript:

#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"

Die Sache ist, dass ich die folgende Fehlermeldung erhalte:

/bin/bash: -c: line 0: syntax error near unexpected token `)'
/bin/bash: -c: line 0: `mysqldump -uroot -pbyt)uy6 database_name '

Ich habe ziemlich viel getestet und festgestellt, dass der Fehler durch das Sonderzeichen im Passwort verursacht wird. Da ich das Passwort aus der .my.cnf-Datei erhalte, kann ich es nicht durch Festcodierung der Escape-Zeichen umgehen.

Kann mir jemand eine Möglichkeit anbieten, möglicherweise nach diesen Sonderzeichen in der Variable „$password“ zu suchen und diese mit Escape-Schrägstrichen („\“) zu ergänzen?

EDIT: Ich habe vergessen zu erwähnen, dass ich dies über die partielle Virtualisierung von OpenVZ mithilfe des Befehls vzctl exec ausführe. Aus diesem Grund brauchte ich eine Methode, mit der ich die Sonderzeichen wie gewünscht maskieren kann. Die Methode, die ich entwickelt habe, war eine einfache Verwendung des Befehls sed:

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

Vielen Dank an alle für Ihre Hilfe.

Beste grüße!

Antwort1

Sie müssen nichts davon tun. Wie HBruijn in einem Kommentar erwähnt hat, $HOME/.my.cnfenthält die Datei bereits Ihre Anmeldeinformationen und die Befehlszeilentools von MySQL verwenden diese automatisch, ohne dass Sie etwas Besonderes tun müssen.

Also tun Sie einfach:

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

verwandte Informationen