gpt4 book ai didi

mysql - 在 Bash 备份脚本中删除旧的 MySQL/MariaDB 备份

转载 作者:行者123 更新时间:2023-11-29 12:43:04 26 4
gpt4 key购买 nike

我编写了一个在 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

最佳答案

如果您知道在特定时间范围内执行的备份数量,假设您知道从 11 月 2 日到 12 月 2 日,您知道已经进行了 30 个备份,而您现在想要删除这些备份,只需使用备份,做起来非常简单,而且你不必处理 bash 中非常复杂的日期:

$ (ls -t|head -n 30;ls)|grep -v ^Database|sort|uniq -u|xargs rm -rf

然后,您可以通过删除每天较旧的脚本来轻松自动化此脚本,这样您就只能获得所需的固定数量的备份:

#! /bin/bash
# Create new full backup
BACKUP_DIR="/path-to-backups/"
BACKUP_DAYS=1

# Prepare backup
cd ${BACKUP_DIR}
latest=`ls -rt | grep 201 | head -1`

# Change latest reference
ln -sf ${BACKUP_DIR}${latest} latest

# Cleanup older than one week (n days)
to_remove=`(ls -t | grep 201 | head -n 3;ls)|sort|uniq -u`
echo "Cleaning up... $to_remove"
(ls -t|head -n ${BACKUP_DAYS};ls)|sort|uniq -u|xargs rm -rf

echo "Backup Finished"
exit 0

然后您可以将其链接到每日 cron。这篇博客文章对此进行了解释,如何以非常简单的方式执行此操作(但使用热备份,没有 mysqldump):http://codeispoetry.me/index.php/mariadb-daily-hot-backups-with-xtrabackup/

关于mysql - 在 Bash 备份脚本中删除旧的 MySQL/MariaDB 备份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25852341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com