2016-11-22 49 views
-1

我有一個sh腳本來備份數據庫服務器。sh腳本中的mysqldump不起作用

#!/bin/bash 
mysqldump -u <username> -p<password> --all-databases --single-transaction --opt > /home/backup/h_157_2-1.sql 
rsync -zrp --partial /home/backup/h_157_2-1.sql [email protected]<server-ip>:/home/backup/H_157_2/ 

當我在命令行上自己執行這些兩個命令,他們的工作預期,我得到的內容.sql文件。但是,當我執行該腳本文件只包含此:

Usage: mysqldump [OPTIONS] database [tables] 
OR  mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] 
OR  mysqldump [OPTIONS] --all-databases [OPTIONS] 
For more options, use mysqldump --help 

我已經嘗試過改變了的選項的順序或漏下--opt但結果還是一樣。那麼,什麼可能導致命令不能在腳本中工作?

+0

你在你的mysqldump語法中有錯誤,這就是爲什麼這個文件被填充了'mysqldump'命令的結果 –

+0

@ElzoValugi錯誤是什麼?爲什麼當我將命令複製到命令行並執行它時會工作? – DocRattie

+0

嘗試'-A'而不是'--all-databases'。它爲我工作 –

回答

0

我找不到解決初始問題的方法。即使在Elzo Valugi的聊天幫助下,結果仍然是一樣的:在命令行上超越了mysqldump的功能。在劇本中,我總是收到同樣的信息。 (見最初的問題)。

爲了解決這個問題,我建立了一個解決方法來自行轉儲每個數據庫。

#!/bin/sh 
for dir in /var/lib/mysql/*/; 
do 
    dir=${dir%*/} 
    mysqldump -u <user> -p<password> ${dir##*/} --single-transaction --opt > /home/backup/h_157_2_${dir##*/}.sql 
    rsync -zrp --partial /home/backup/h_157_2_${dir##*/}.sql [email protected]<server-ip>:/home/backup/H_157_2/ 
done; 

隨着通過在MySQL存儲目錄中的所有directorys這我循環,削減他們下到DIR-名稱和使用的mysqldump的。這將每個數據庫放在它自己的文件中。我認爲這可以解決他們都合併爲一個,但爲了我的需要,我很好用不同的文件。