备份保留与轮转是什么
备份保存策略要写进脚本而不是靠人记:按日、周、月、年分级保留,越近的备份越密、越远的越疏,到期的自动清理,同时保留可审计的清单与删除日志。清理逻辑本身是高风险操作:目录匹配模式写宽一点,就可能把刚生成的新备份甚至整个备份目录一起删掉。稳妥做法是先在测试目录演练,再对生产定时任务上线。
基本信息
| 分级策略 | 日备、周备、月备、年备,按重要性与存储成本设定保留数 |
|---|---|
| 清理手段 | 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 年以上 | 合规归档,落对象存储或磁带 |
删除命令上线前必须先在测试目录演练,并把「列出将删文件」与「实际删除」分成两步执行,确认范围无误后再删。目录末尾斜杠写漏或写错会显著改变匹配范围。
清理任务与备份任务要错开时间:备份生成后需要校验,如果清理紧接着执行,可能删掉刚生成但尚未验证的文件。