0

以下は、スクリプトが Linux サーバー上にある MYSql データベースでスケジュールされていることです。以下は、bashスクリプトを使用したコードです

#!/bin/bash
# MySQL backup script
# Last update: 20090504
#

MHOST=localhost
MUSER=backup
MPASS=OwBPimRc
BACKUPDIR="/mnt/backup"

########################################################################

MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"

DBPREFIX="$(hostname -s).mysqldb"

echo "Run MySQL backup"
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
  FILE=${BACKUPDIR}/${DBPREFIX}.${db}.gz
  $MYSQLDUMP --no-tablespaces --skip-lock-tables -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done 

しかし、このプロセスを 1 のようにカスタマイズしたいのですが、上記の bash スクリプトを使用して、最新の 10 データベースのバックアップを保存したいので、同じことを行う bash スクリプト コマンドを提案してください。

よろしくアービンド

4

3 に答える 3

1

このようなものが動作するはずです:

MHOST=localhost
MUSER=backup
MPASS=OwBPimRc
BACKUPDIR="/mnt/backup"

MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"

DBPREFIX="$(hostname -s).mysqldb"

echo "Run MySQL backup"
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
    FILE=${BACKUPDIR}/${DBPREFIX}.${db}.`date +%Y%m%d`.gz
    $MYSQLDUMP --no-tablespaces --skip-lock-tables -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done 

find  -name "${BACKUPDIR}/${DBPREFIX}*" -type f -mtime +10 -exec rm -f '{}' ';'

基本的な考え方は、ファイル名に日付を使用して、毎日の個別のデータベース バックアップを取得することです。最後の行では、最新の 10 個のバックアップのみをそのまま残して、10 日より古いすべてのファイルを削除できます。

于 2012-08-31T12:33:56.040 に答える
0

jOnes のソリューションは合理的です。別の方法は次のとおりです。スクリプトをそのままにして、「logrotate」を使用してプルーニングを処理します。あなたの/etc/logrotate.confに、次のようなものを入れます:

   /mnt/backup/*.mysqldb {
       daily
       rotate 10
       missingok
       nocompress
   }

を参照man logrotateして、最適なオプションを確認してください。

于 2012-08-31T12:42:47.670 に答える