首页/数据/数据库速查/备份保留与轮转管理
备份与恢复56 条

备份保留与轮转管理

保留策略要写进脚本:按天/周/月分级保留、自动清理老文件、保留清单可审计;清理逻辑必须精确匹配备份目录避免误删。

数据库速查数据更新于 2026-10-13

备份保留与轮转是什么

备份保存策略要写进脚本而不是靠人记:按日、周、月、年分级保留,越近的备份越密、越远的越疏,到期的自动清理,同时保留可审计的清单与删除日志。清理逻辑本身是高风险操作:目录匹配模式写宽一点,就可能把刚生成的新备份甚至整个备份目录一起删掉。稳妥做法是先在测试目录演练,再对生产定时任务上线。

基本信息

分级策略日备、周备、月备、年备,按重要性与存储成本设定保留数
清理手段find 按修改时间删除,或按备份清单逐项删除
归档长期备份转对象存储或磁带,降低本地存储压力
审计每次删除记录清单与执行时间,便于事后核对
验证定期随机抽一份备份做恢复演练

典型使用场景

  • 容量控制:备份目录持续增长时按保留策略自动清理
  • 合规留存:保留最近若干月或若干年的月度备份供审计调阅
  • 分层存储:近端保留高频备份用于快速恢复,远端保留低频备份用于灾难场景
  • 成本优化:把长期归档从高性能存储迁到廉价对象存储
  • 演练支撑:保留策略里明确哪些备份可用于演练,避免误删唯一可用副本

轮转与归档示例

轮转与归档示例
# 日备保留 14 天,周备保留 56 天(先在测试目录验证!)
find /data/backup/daily -name 'all_*.sql.gz' -mtime +14 -delete
find /data/backup/weekly -name 'weekly_*.sql.gz' -mtime +56 -delete
# 删除前列出将被删除的文件,确认范围无误
find /data/backup/daily -name 'all_*.sql.gz' -mtime +14 -print
# 月度归档迁移到对象存储
rclone copy /data/backup/monthly/ remote:db-archive/monthly/ --include '*.gz'
# 恢复演练抽取一份备份
ls -l /data/backup/daily/ | tail -5

保留策略示例

级别建议保留用途
日备最近 14 天日常误操作回滚
周备最近 8 周跨周期问题追溯
月备最近 12 个月月度审计与合规
年备3 年以上合规归档,落对象存储或磁带
删除命令上线前必须先在测试目录演练,并把「列出将删文件」与「实际删除」分成两步执行,确认范围无误后再删。目录末尾斜杠写漏或写错会显著改变匹配范围。
清理任务与备份任务要错开时间:备份生成后需要校验,如果清理紧接着执行,可能删掉刚生成但尚未验证的文件。

易错点

  • 目录匹配写宽或被通配符吸进去:误删范围远超预期,历史上多次出现过删空备份目录的事故,执行前必须核对路径与匹配模式
  • 清理任务与备份任务同时段执行:可能删掉刚生成还没完成校验的文件
  • 只做本地保留不做异地归档:整机或整盘故障时所有备份一起丢失
  • 没有删除日志:事后无法判断某份备份是被清理还是从未生成,影响故障定位
  • 保留策略长期不演练恢复:备份存在但不可恢复,直到真正需要时才暴露

数据来源与参考

  • find(1) man page
  • MySQL 8.0 Reference Manual: Backup and Recovery

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌