| name | backup |
| title | 数据备份方法论 |
| soul | SOUL.md |
| persona | executor |
| version | 1 |
| triggers | ["备份","数据备份","备份策略","备份验证","备份恢复","backup"] |
| depends_on | ["infra/inventory-loader","infra/credentials","safety/preflight-and-audit"] |
| required_vars | [] |
| description | 数据备份的原则、策略选择框架和可恢复性验证规范。 不包含任何具体工具命令——具体实现由使用者根据自身技术栈在本地 skill 中编写。
|
数据备份方法论
本 skill 是原则与流程层。具体的备份命令(mysqldump、mongodump、redis BGSAVE 等)
由使用者在自己的 inventory 和本地 skill 中实现,不在此处定义。
核心原则:3-2-1-1-0
任何生产数据备份方案必须满足以下条件,才能被视为"有效备份":
- 3 — 至少保留 3 份数据副本(原始数据 + 2 份备份)
- 2 — 备份存储在至少 2 种不同介质上(磁盘、对象存储、磁带…)
- 1 — 至少 1 份备份存储在异地(不同机房/可用区/云区域)
- 1 — 至少 1 份备份处于离线或不可变状态(防勒索)
- 0 — 恢复测试零错误:每份备份必须通过定期恢复验证,未验证的备份等于不存在
不满足 3-2-1-1-0 的方案,执行高危操作前不视为"已有有效备份",preflight 将阻断操作。
策略选择框架
按数据变化频率决定备份类型
| 数据特征 | 推荐策略 | 理由 |
|---|
| 写入频繁(小时/分钟级别) | 全量 + 增量/WAL | 纯全量代价太高 |
| 写入中等(每日批量) | 每日全量 | 简单可靠,恢复最快 |
| 写入很少(配置、参数) | 变更触发 + 每周全量 | 按需即可 |
| 只读(归档数据) | 一次性全量 + 不可变存储 | 不需要轮转 |
按 RTO/RPO 要求决定备份频率
- RPO(可容忍丢失多少数据)→ 决定备份间隔
- RTO(可容忍多久恢复完成)→ 决定存储位置与格式
RTO < 1 小时:备份必须在本地或近端存储,并预先测试恢复流程
RPO < 1 小时:必须使用增量备份或流式复制,不能只有每日全量
可恢复性验证规范
备份文件存在 ≠ 可以恢复。以下验证步骤缺一不可:
验证级别 1:文件完整性(每次备份后自动执行)
- 校验文件大小不为零
- 校验 MD5/SHA256 摘要与备份时生成的摘要一致
- 对于压缩文件,验证压缩包可以完整解压(
gzip -t 或等效命令)
验证级别 2:逻辑完整性(每周至少一次)
- 将备份文件恢复到隔离测试环境
- 执行数据完整性检查(行数、关键表存在、索引可用)
- 记录恢复耗时,与 RTO 对比
验证级别 3:全流程演练(每季度一次)
- 模拟真实故障场景,从备份完整恢复整个服务
- 验证应用层可以正常连接和操作
- 记录结果并归档,作为 preflight 的
backup_verified 证明
保留期与轮转策略
| 备份类型 | 最短保留期 | 轮转规则 |
|---|
| 每日全量 | 7 天 | 自动删除 7 天前的备份 |
| 每周全量 | 4 周 | 保留最近 4 个周末备份 |
| 每月快照 | 12 个月 | 保留近 12 个月末备份 |
| 高危操作前备份 | 永久保留(或直到下一次同类操作成功验证后删除) | 不自动轮转 |
异地备份的保留期不得短于本地备份。
与 preflight 的耦合
执行任何涉及数据变更的高危操作前,preflight skill 会检查 backup_verified:
- Agent 询问使用者确认目标数据在 24 小时内存在经过验证的备份
- 使用者(或自动化流程)提供最近备份的时间戳和存储位置
- preflight 记录
backup_verified = true 后,操作才可继续
不可跳过此步骤。 即使操作看起来是"低风险"的,一旦涉及数据写入或删除,preflight 必须完成。
告警与通知原则
- 备份未在预期窗口内完成 → 立即告警,中断依赖该备份的操作
- 备份文件校验失败 → 立即告警,将此备份标记为无效,触发重新备份
- 连续 N 次备份失败 → 升级告警,要求人工介入(N 由使用者根据 RTO 自定义)
- 存储空间低于阈值 → 提前告警,不要等到磁盘写满才发现
使用者须知
本框架不提供任何具体的备份脚本。使用者需要:
- 根据自身数据库/缓存/消息队列技术栈,在本地编写具体的备份 skill
- 将备份存储路径、目标节点等参数写入
inventory/hosts.yaml
- 将认证凭据写入
config/secrets.env
- 在本地 skill 中声明
depends_on: [backup],确保方法论约束生效
参见 skills/infra/inventory-loader 了解如何声明变量,参见 skills/infra/credentials 了解凭据规范。