CentOS 备份后的安全清理与自动化保留策略
一、标准清理流程
- 删除已成功验证的过期备份:优先清理本地或远端存储中已确认可恢复的旧备份,避免误删正在使用的唯一副本。
- 清理包管理器缓存:执行 yum clean all(CentOS 7/8)或 dnf clean all(CentOS 8+),释放 /var/cache/yum|dnf 空间。
- 清理临时目录:删除 /tmp 与 /var/tmp 中不需要的文件(系统重启通常会清理,但长期运行可能堆积)。
- 清理日志:对不再需要的日志使用 truncate -s 0 /var/log/ 清空内容,避免直接删除正在写入的日志文件;必要时再移除历史轮转文件。
- 清理回收站:如桌面环境或用户目录存在回收站,清空 ~/.local/share/Trash/files。
- 分析大文件:用 ncdu 或 “du -sh /*” 定位占用空间最大的目录,确认无业务关联后再清理。
二、按备份类型的清理要点
- 文件/目录类备份(tar、rsync 等):按“保留最近 N 天/周/月”的规则删除旧归档,避免无限增长。
- MySQL 备份:使用 mysqldump 生成 .sql.gz 后,按时间策略删除历史 .sql.gz 文件,保留足以回滚的窗口即可。
- 使用 BorgBackup 等增量/去重备份:采用“保留策略”而不是粗暴按时间删除,例如保留 7 天日备、4 周周备、6 月月备,既控容量又保可恢复性。
三、自动化清理脚本示例
- 示例一 文件/目录备份的保留策略(保留最近 7 天)
#!/bin/bash
BACKUP_DIR="/opt/backup"
RETENTION_DAYS=7
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
echo "[$(date)] 已清理 $BACKUP_DIR 中超过 $RETENTION_DAYS 天的备份。" >> "$BACKUP_DIR/cleanup.log"
- 示例二 MySQL 备份的保留策略(保留最近 15 天)
#!/bin/bash
MYSQL_BACKUP_DIR="/home/backup/mysql"
RETENTION_DAYS=15
find "$MYSQL_BACKUP_DIR" -type f -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
echo "[$(date)] 已清理 $MYSQL_BACKUP_DIR 中超过 $RETENTION_DAYS 天的数据库备份。" >> "$MYSQL_BACKUP_DIR/cleanup.log"
- 示例三 BorgBackup 的保留策略(保留 7 日、4 周、6 月)
#!/bin/bash
BORG_REPO="/backup/borg_repo"
borg prune --verbose --list \
--keep-daily=7 \
--keep-weekly=4 \
--keep-monthly=6 \
"$BORG_REPO"
- 定时任务建议(与备份任务配套)
- 每天 01:00 清理 15 天前的 MySQL 备份:
0 1 * * * /home/backup/remove_mysql_backup.sh
- 每天 02:00 清理 7 天前的文件/目录备份:
0 2 * * * /opt/backup/cleanup.sh
- 每周一 03:00 执行 Borg 修剪:
0 3 * * 1 /opt/backup/borg_prune.sh
四、安全与验证建议
- 先备份后清理:任何清理前再次确认关键数据已成功备份且可恢复。
- 先小范围演练:首次可将删除条件改为 “-mtime +1” 试运行,确认无误再改为正式保留天数。
- 避免误删正在写入的日志:优先用 truncate -s 0 清空内容,再按轮转策略移除旧文件。
- 保留一份“异地/离线”副本:在本地清理前,确保远端或离线介质已有有效副本。
- 记录与告警:在清理脚本中写入 日志 并保留 清理前后磁盘使用量,必要时增加 告警。
- 谨慎使用危险命令:如 rm -rf 建议配合 -print 或先用 find … -ls 核对目标列表,再执行删除。