定期清理过期的备份文件,保留最近时间的30个备份

定期清理过期的备份文件,保留最近时间的30个备份

目录结构说明

/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
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值