使用 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"

相關內容