我有以下用于轮换数据库备份的配置。包含/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
每个数据库运行一次或两次?如果他们运行两次,那么如何让他们运行一次呢?
笔记:我知道我可以分别为 db1 和 db2 定义配置。但我正在寻找更清洁的解决方案。
答案1
sharedscripts
除非设置,否则它会针对每个旋转文件运行。然后,如果至少发生一次轮换,则仅运行一次。
不要覆盖PATH
变量!我添加了nocreate
,sharedscripts
并添加了一个循环;转储是一步创建并压缩的。
/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
}