目录结构说明
/mnt/backup/mysql
.
├── bin
│ └── backup_clean.sh
├── data
│ ├── 2023-09-16_00-00-01
│ ├── 2023-09-17_00-00-01
│ ├── 2023-09-18_00-00-01
│ ├── 2023-09-19_00-00-01
│ └── 2023-09-20_00-00-01
└── logs
└── clean.log
目录说明:
/mnt/backup/mysql/bin/backup_clean.sh
清理备份脚本/mnt/backup/mysql/data
备份文件所在文件夹/mnt/backup/mysql/logs/clean.log
日志文件
编写脚本
编写脚本
vim /mnt/backup/mysql/bin/backup_clean.sh
脚本内容:
#!/bin/bash
#set -e
#set -x
# 备份文件夹路径
BACKUP_DIR="/mnt/backup/mysql/data"
# 最大允许备份文件数量
MAX_BACKUP_COUNT=30
# 日志文件
LOG_FILE="/mnt/backup/mysql/logs/clean.log"
# 日期时间
DATE_STR="$(date '+%Y-%m-%d_%H-%M-%S')"
# 计算当前备份文件数量
backup_count=$(find "${BACKUP_DIR}" -maxdepth 1 -type d | grep -v "${BACKUP_DIR}"'$' | wc -l)
echo "${DATE_STR}" >> "${LOG_FILE}" 2>&1
# 如果备份文件数量超过最大允许数量,删除最早的备份文件
if [ "$backup_count" -gt "$MAX_BACKUP_COUNT" ]; then
oldest_files=$(find "${BACKUP_DIR}" -maxdepth 1 -type d -exec stat -c "%Y %n" {} \; | sort -n | grep -v "${BACKUP_DIR}"'$' | head -n -$MAX_BACKUP_COUNT | awk '{print $2}')
echo "开始清理备份文件……" >> "${LOG_FILE}" 2>&1
echo "$oldest_files" | xargs -r -I {} echo {} >>"${LOG_FILE}" 2>&1
echo "$oldest_files" | xargs -r -I {} rm -rf {}
echo "完成清理备份文件" >> "${LOG_FILE}" 2>&1
else
echo "暂无待清理备份文件">> "${LOG_FILE}" 2>&1
fi
echo -e "\n">> "${LOG_FILE}" 2>&1
#set +x
脚本授权
chmod +x /mnt/backup/mysql/bin/backup_clean.sh
配置定时任务
crontab -e
# 每天执行清理MySQL备份文件
0 1 * * * /mnt/backup/mysql/bin/backup_clean.sh