0

まず、スクリプトを手動で実行すると正常に動作するため、crontabでは正しく動作しないと言っています。

問題は、cronjobを使用してバックアップスクリプトを実行すると、mysqlダンプがtarになり、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

問題はどこだ?誰かが以前にこのような問題を経験したことがありますか?

よろしく。

4

2 に答える 2

1

私の推測では、最後の行が問題です。次のシェル グロブ ( *.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"

.sqltar ボールするファイルがまだない可能性があります。mysqlインストールはしていませんが、forループも台無しになっていると思われます。代わりに次のようなことを試してください。

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

mysqlshowおよびコマンドには、おそらく他の引数を挿入する必要がありmysqldumpます。もちろん、これは tarball を作成しませんが、圧縮されたバックアップを提供します。

于 2013-01-10T02:54:29.080 に答える
1

mysqldumpスクリプトの完全なパス名とスクリプト内で試すことができますかmysql

そう:

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
于 2013-01-10T04:59:40.120 に答える