概述
Data Backup Patterns 是一套围绕数据备份与恢复的实践模式集合,目标是用自动化、可测试、可恢复的方式保护数据。资料以策略框架、代码示例和反模式清单的形式组织,覆盖数据库、文件系统与云存储三类场景。
备份策略框架
3-2-1 规则:数据的 3 份副本(1 份主数据 + 2 份备份)、2 种不同的存储介质/类型、1 份异地副本。
备份类型对比:
| 类型 | 速度 | 存储占用 | 恢复 | 建议频率 |
|---|---|---|---|---|
| 全量(Full) | 慢 | 大 | 快 | 每周 |
| 增量(Incremental) | 快 | 小 | 慢(依赖链) | 每日 |
| 差异(Differential) | 中 | 中 | 中(依赖上次全量) | 每日 |
| 快照(Snapshot) | 即时 | 视情况 | 快 | 每小时 |
数据库备份
PostgreSQL:提供的 bash 脚本使用 pg_dump 以 custom 格式、压缩级别 9 导出为 .sql.gz 文件,并通过 pg_restore --list 校验备份有效性,最后输出文件大小。
时间点恢复(WAL 归档):在 postgresql.conf 中开启 archive_mode = on,配置 archive_command 将 WAL 文件复制到归档目录;恢复时通过 restore_command 与 recovery_target_time 恢复到指定时间点。
Redis:可用 redis-cli BGSAVE 触发 RDB 快照;或在 redis.conf 中设置 appendonly yes、appendfsync everysec 启用 AOF 以实现时间点恢复。
文件系统备份
基于 rsync:脚本通过 rsync -av --delete --link-dest 利用硬链接实现增量备份,每次备份生成带时间戳的目标目录,并更新 latest 符号链接指向最新备份。
排除规则:资料给出了 .backup-exclude 示例,排除 .git/、node_modules/、.venv/、__pycache__/、*.pyc、.env.local、*.secret、tmp/、.build/ 等目录与文件。
加密
GPG:使用 gpg --symmetric --cipher-algo AES256 加密备份文件,恢复时用 gpg --decrypt 解密。
age(现代替代方案):用 age-keygen -o key.txt 生成密钥对,使用 age -r <公钥> 加密、age -d -i key.txt 解密。
轮换策略
资料提供了 Python 类 BackupRotator,接收备份目录与保留数量参数(keep_daily=7、keep_weekly=4、keep_monthly=12)。其 rotate() 方法按修改时间排序备份文件,保留最近的每日备份,并为每周、每月各挑选最接近目标时间的备份,其余文件删除。
云存储
S3 兼容上传:脚本使用 aws s3 cp 上传备份,指定 --storage-class STANDARD_IA 与 --sse AES256 服务端加密,路径前缀按年月组织。资料建议在 S3 生命周期规则中配置自动归档,例如 30 天后转 Glacier、365 天后转 Deep Archive。
自动化调度
cron:示例为每日 2 点执行 backup-daily.sh、每周日 3 点执行 backup-weekly.sh,日志追加输出到 /var/log/backup.log。
launchd(macOS):给出 ~/Library/LaunchAgents/com.backup.daily.plist 示例,通过 StartCalendarInterval 设置每日 2 点 0 分执行备份脚本。
恢复测试
自动化恢复测试脚本接收备份文件路径作为参数,创建带时间戳的临时测试库,用 pg_restore 还原,随后查询表中行数校验数据完整性;示例要求行数不少于 50,否则判定失败并清理测试库,通过则输出成功信息后删除测试库。
反模式
资料列出的反模式包括:未测试的备份(未恢复过的备份不算备份)、敏感数据未加密(静态备份应始终加密)、单一存储位置(应遵循 3-2-1 规则)、无轮换(备份无限增长会占满存储)、纯手工备份(应全面自动化)、无监控(备份失败应立即告警)。
限制
资料未说明该模式的许可证、适用平台版本范围、维护状态与作者支持渠道,这些信息暂未提供。