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 変数内の特殊文字を検索し、エスケープ スラッシュ ("\") を追加する方法を教えていただけませんか。

編集: vzctl exec コマンドを使用して OpenVZ 部分仮想化経由でこれを実行していることを忘れていました。これが、要求どおりに特殊文字をエスケープできる方法が必要だった理由です。私が開発した方法は、sed コマンドを単純に使用するものでした。

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

皆様のご協力に感謝いたします。

よろしくお願いします!

答え1

これらを行う必要はありません。HBruijn がコメントで述べたように、$HOME/.my.cnfファイルにはすでに認証情報が含まれており、特別な操作をしなくても MySQL のコマンドライン ツールによって自動的に認証情報が使用されます。

だから、こうするだけです:

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

関連情報