データベースのバックアップ循環のために、次の構成があります。 2つの/var/mysql_backup/data/
サブディレクトリとdb1
。db2
/var/mysql_backup/data/*/db.sql.gz {
daily
rotate 7
nocompress
notifempty
missingok
create 640 root root
dateext
dateformat _%Y_%m_%d_%s
extension .sql.gz
postrotate
PATH=/var/mysql_backup/data/
MYSQL_USER=USER
MYSQL_PASS='PASS'
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
MYSQLDUMP_OPTIONS=" --single-transaction --quick"
#Backup for db1
mysqldump ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} db1 > ${PATH}/db1/db.sql
gzip -9f ${PATH}/db1/db.sql
#Backup for db2
mysqldump ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} db2 > ${PATH}/db1/db.sql
gzip -9f ${PATH}/db2/db.sql
endscript
}
mysqldump
私の質問は:gzip
データベースごとに1〜2回実行しますか? 2回実行された場合、どのように1回実行するのですか?
ノート:db1とdb2の構成を別々に定義できることを知っています。しかし、私はよりクリーンなソリューションを探しています。
答え1
sharedscripts
設定されていない場合は、回転したすべてのファイルに対して実行されます。その後、1つ以上の回転が発生した場合、一度だけ実行されます。変数を
上書きしないでくださいPATH
。を追加し、nocreate
ループsharedscripts
を追加しました。ダンプが 1 段階で生成され圧縮されました。
/var/mysql_backup/data/*/db.sql.gz {
daily
rotate 7
nocompress
notifempty
missingok
create 640 root root
dateext
dateformat _%Y_%m_%d_%s
extension .sql.gz
nocreate
sharedscripts
postrotate
mysql_user=USER
mysql_pass='PASS'
for db in db1 db2; do
mysqldump -u"$mysql_user" -p"$mysql_pass" --single-transaction --quick "$db" |
gzip -9f > "/var/mysql_backup/data/$db/db.sql.gz"
done
endscript
}