Mysqldump
bash 腳本中 mysqldump 的 mysql 憑據失敗
我在備份 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(以及它使用的密碼)感興趣,所以請隨時在此處發表評論並給出解釋。