温馨提示×

centos备份数据后如何清理

小樊
41
2025-11-16 00:01:48
栏目: 智能运维

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

# 删除超过保留天数的 .tar.gz 归档
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 核对目标列表,再执行删除。

0