Mysqldump

bash 腳本中 mysqldump 的 mysql 憑據失敗

  • March 23, 2017

我在備份 MySQL 模式的腳本中遇到了一個非常奇怪的問題。該腳本創建一個模式列表,然後為每個模式執行 mysqldump 命令。憑據儲存在單獨的文件 db_credentials 中。

相關的程式碼行是……

. /home/backupuser/db_credentials
user=$USERNAME
password=$PASSWORD
dbList=$(mysql -u$user -p$password -Bse "SHOW DATABASES")
for db in $dbList
do 
  mysqldump –u$user -p$password --single-transaction --routines  $db > $dumpdir/${db}_${timestamp}.sql
  echo $db
done 

輸出看起來像這樣……

mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect
db_1
mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect
db_2
mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect
db_3
mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect
...

這表明 $dblist 數組變數已正確填充,但由於某種原因,myslqdump 命令未使用提供的憑據。

我正在使用 sudo 從命令行執行腳本,但我不知道它從哪裡獲取 user=root 或密碼。

我剛剛檢查了備份目錄,並且正在創建相關文件,但是它們是空的。

MySQL 5.1 版

O/S Centos 6.8

Bash 4.1.2 版

任何幫助將非常感激

抱歉,我犯了一個非常業餘的錯誤。顯然,有幾行程式碼是從 Windows 機器上複製和粘貼的,所以 CR/LF 作為行尾字元。將其更改為 LF 並且效果很好。

我仍然會對它為什麼決定使用 root@localhost(以及它使用的密碼)感興趣,所以請隨時在此處發表評論並給出解釋。

引用自:https://dba.stackexchange.com/questions/167967