2011-09-02 142 views
0

我想做一個bash腳本來備份我的sevrer,但是它正在創建空的tar歸檔文件和空的sql文件,我不知道爲什麼。任何人都可以在這裏看到問題?Bash備份腳本

#!/bin/bash 
SERVER_DIR="/var/www/vhosts/site.org" 
DATE=$(date +"%d-%m-%Y") 
BACKUP_DIR="/backups/$DATE" 
NAME="full-$DATE" 

MYSQLUSER="admin" 
MYSQLPASS="pass" 
MYSQLDUMP="$(which mysqldump)" 
GZIP="$(which gzip)" 

mkdir -p $BACKUP_DIR 
tar -zcvf $BACKUP_DIR/$NAME.tar.gz $SERVER_DIR 
$MYSQLDUMP -u $MYSQLUSER -p$MYSQLPASS --all-databases | $GZIP -9 > $BACKUP_DIR/$NAME.sql 
find /backup/ -mtime +31 -exec rm -rf {} \; 
+0

tar是否提供任何輸出? –

+0

您是否嘗試輸出您定義的變量,看看他們是否正常?並使用它們的值手動運行備份命令(由值替換)? – AbiusX

+0

,你能迴應$ BACKUP_DIR/$ NAME來確定它實際上是你想要的嗎? –

回答

2

我認爲你只是缺少使用gzip線-c,嘗試:

$MYSQLDUMP -u $MYSQLUSER -p$MYSQLPASS --all-databases | $GZIP -c9 > $BACKUP_DIR/$NAME.sql.gz 
+0

歡迎@gbp。我同意你的分析。祝你好運。 – shellter

0

你確定你有訪問權SERVER_DIR權限=「/無功/網絡/虛擬主機/網站.org「,當你運行你的腳本。

0

您正在創建/backups,但從/backup刪除舊備份。這對最終結果並不重要,但幾個月後你將會用光盤。

我不確定在目錄名和文件名中都有這個日期是有用的,但這顯然取決於您。

SQL文件名應該有一個.gz後綴?

使用which將MYSQLDUMP和GZIP放入變量中幾乎沒有用;如果可以在PATH上找到它們,外殼也會找到它們;或者說,如果shell找不到東西,那麼which也不能。