- ソリューションのシンプルさ
- 個別のファイル内の各データベース
- 「bdname.YYYY-MM-DD-HH:mm:ss.sql.gz」の形式の名前
- 各データベースには、一定数のアーカイブが保存されます
- 一連のデータベースアーカイブがローテーション中です
- pg_dumpの特定のパスワードの問題を解決する
- など
一般的なスクリプトアルゴリズムでは、データベースのリストが選択され、そこからアーカイブが保存されます。 廃止されたものは削除されます。 スクリプトには、ローテーション用のアーカイブコピーの数、DBMSのログイン/パスワード、および作業結果を保存するためのフォルダーを指定する機能と必要性があります。
MySQL:
#!/bin/bash
# user & password
USER=root
PASS=pass
# number of backups to be saved
KEEP=14
# dir to backup
DIR=/ var /backups/mysql
NOW=$(date + "%Y-%m-%d" )
DBS= "$(mysql -u $USER -p$PASS -Bse 'show databases')"
for db in $DBS
do
BACKUPS=`find $DIR -name "$db.*.gz" | wc -l | sed 's/\ //g' `
while [ $BACKUPS -ge $KEEP ]
do
ls -tr1 $DIR/$db.*.gz | head -n 1 | xargs rm -f
BACKUPS=`expr $BACKUPS - 1`
done
FILE=$DIR/$db.$NOW-$(date + "%T" ).sql.gz
mysqldump -u $USER -p$PASS $db | gzip -9 > $FILE
done
exit 0
* This source code was highlighted with Source Code Highlighter .
どうしてもパスワードを渡すことができなかったので、PostgreSQLを長い間いじりましたが、解決策がありました。
PostgreSQL:
#!/bin/bash
# user & password
USER=postgres
PASS=pass
# number of backups to be saved
KEEP=14
# dir to backup
DIR=/ var /backups/pgsql
PGPASSWORD=$PASS
export PGPASSWORD
NOW=$(date + "%Y-%m-%d" )
DBS= "$(psql -U $USER -lt |awk '{ print $1}' |grep -vE '^-|^List|^Name|template[0|1]')"
for db in $DBS
do
BACKUPS=`find $DIR -name "$db.*.gz" | wc -l | sed 's/\ //g' `
while [ $BACKUPS -ge $KEEP ]
do
ls -tr1 $DIR/$db.*.gz | head -n 1 | xargs rm -f
BACKUPS=`expr $BACKUPS - 1`
done
FILE=$DIR/$db.$NOW-$(date + "%T" ).sql.gz
pg_dump -U $USER $db | gzip -c > $FILE
done
PGPASSWORD=
export PGPASSWORD
exit 0
* This source code was highlighted with Source Code Highlighter .
これらのすばらしいスクリプトは、Debianを実行しているマシンで長く成功しました。 クラウンに