2013-01-10 84 views
0

首先,我說它無法與crontab正常工作,因爲當我手動運行腳本時,它工作正常。TAR無法正常工作與crontab

問題是,當我使用cronjob運行備份腳本,並且它來打開mysql轉儲時,tar歸檔文件只有16字節大小(並且它是空的,所以它看起來像沒有文件打包到檔案中),奇怪的是,當我手動運行腳本時,它運行了將近5分鐘,tar包的大小爲~1.8GB

這裏是我的bash代碼:

#!/usr/local/bin/bash 
# Configuration 
BACKUPD="/backup/mysql" 
MySQLuser='root' 
MySQLpass='xxxx' 
# End configuration 
ROK=`date +%Y` 
MIESIAC=`date +%m` 
DZIEN=`date +%d` 
GIM=`date +%H-%M` 

if [ -d $BACKUPD/$ROK/$MIESIAC/$DZIEN ] 
then 
echo 
else 
mkdir -p $BACKUPD/$ROK/$MIESIAC/$DZIEN 
fi 

for db in $(echo "SHOW DATABASES;" | mysql --user=$MySQLuser --password=$MySQLpass | grep -v -e "Database" -e "information_schema") 
do 
    mysqldump --skip-lock-tables --ignore-table=log.log --user="$MySQLuser" --password="$MySQLpass" $db >$BACKUPD/$ROK/$MIESIAC/$DZIEN/$db.sql 
done 

cd $BACKUPD/$ROK/$MIESIAC/$DZIEN && tar jcPf $BACKUPD/$ROK/$MIESIAC/$DZIEN/mysql-$GIM.tar.bz2 *.sql && rm -rf *.sql 

問題出在哪裏?有沒有人遇到過這樣的問題?

問候。

+0

一般來說,最好包含任何非內部命令的路徑。在我的系統焦油會/斌/焦油 – gview

+0

@gview我得到了你的觀點,但我認爲心不是焦油本身的問題,而是mysqldump的,不甩什麼,然後焦油沒有一個文件打包,所以它是空的。 – Lucas

+0

嘿,你的腳本對我來說工作得很好。你可以粘貼你的'crontab'進入和'輸出,bash' – Suku

回答

1

您可以在腳本中嘗試使用mysqldumpmysql的完整路徑名。

所以:

如果which mysql等於/usr/local/mysql/bin/mysql

如果which mysqldump等於/usr/local/mysql/bin/mysqldump

修改你的腳本:

for db in $(echo "SHOW DATABASES;" | /usr/local/mysql/bin/mysql --user=$MySQLuser --password=$MySQLpass | grep -v -e "Database" -e "information_schema") 
do 
    /usr/local/mysql/bin/mysqldump --skip-lock-tables --ignore-table=log.log --user="$MySQLuser" --password="$MySQLpass" $db >$BACKUPD/$ROK/$MIESIAC/$DZIEN/$db.sql 
done 
1

我的猜測是最後一行是你的問題。在shell水珠(*.sql):

cd $BACKUPD/$ROK/$MIESIAC/$DZIEN && tar jcPf $BACKUPD/$ROK/$MIESIAC/$DZIEN/mysql-$GIM.tar.bz2 *.sql && rm -rf *.sql 

在當前目錄下展開,並且不的cd後,正如您所料。請嘗試以下方法,這樣更安全。

old_dir=`pwd` 
cd "$BACKUPD/$ROK/$MIESIAC/$DZIEN" 
tar jcPf mysql-$GIM.tar.bz2 *.sql 
rm -fr *.sql 
cd "$old_dir" 

仍然可能沒有任何.sql文件焦油球。我沒有安裝mysql,但我懷疑for循環也是混亂的。試着像下面代替:

mysqlshow | \ 
xargs mysqldump --databases | \ 
bzip2 > $BACKUPD/$ROK/$MIESIAC/$DZIEN/mysql-$GIM.bz2 

你可能會木珠插入的其它參數mysqlshowmysqldump命令。當然,這不會創建一個tarball,但它會給你一個壓縮備份。

+0

不幸的是,它不是':/',輸出包仍然是空的。 +1現在! – Lucas