【发布时间】:2016-05-11 19:07:00
【问题描述】:
我编写了一个在 cron 上启动的 bash 脚本,它每晚和每周备份特定机器上的所有数据库。该脚本会正确删除旧数据库,但月份发生变化的情况除外。
例如,假设是 11 月 2 日。该脚本在晚上 11:00 运行,并正确删除了从 11 月 1 日开始进行的备份。但是到了 12 月 1 日,脚本变得混乱,并没有正确删除从 11 月 30 日开始的备份。
在这种情况下,如何修复此脚本以正确删除旧备份?
DATABASES=$(echo 'show databases;' | mysql -u backup --password='(password)' | grep -v ^Database$)
LIST=$(echo $DATABASES | sed -e "s/\s/\n/g")
DATE=$(date +%Y%m%d)
DAYOLD=$(($DATE-1))
SUNDAY=$(date +%a)
WEEKOLD=$(($DATE-7))
for i in $LIST; do
if [[ $i != "mysql" ]]; then
mysqldump --single-transaction $i > /mnt/backups/mariadb/daily/$i.$DATE.sql
if [ -f /mnt/backups/mariadb/daily/$i.$DAYOLD.sql ]; then
rm -f /mnt/backups/mariadb/daily/$i.$DAYOLD.sql
fi
if [[ $SUNDAY == "Sun" ]]; then
cp /mnt/backups/mariadb/daily/$i.$DATE.sql /mnt/backups/mariadb/weekly/$i.$DATE.sql
rm -f /mnt/backups/mariadb/weekly/$i.$WEEKOLD.sql
fi
fi
done
【问题讨论】: