3-2-1 只说了一半
3-2-1 是:三份副本、两种介质、一份异地。它解决的是「副本会不会一起没」的问题,没有解决「副本本身是不是好的」。3-2-1-1-0 补上了后两条:一份离线或不可变,零错误——备份必须经过校验,恢复失败率要为零。
加这两条不是理论洁癖。勒索软件与误删是当下最常见的两类事故,而它们恰好能穿过前四条:同步复制的副本会被一起加密,能删生产库的账号往往也能删备份。离线或不可变那一份,是唯一能在账号被盗后还活下来的副本。
备份没验证过等于没有备份;只验证了文件存在,等于验证了一半。
先定 RPO 和 RTO,再谈方案
RPO 决定备份频率,RTO 决定恢复方式,两者都该由业务给,不能由运维猜。最常见的错位是:数据库每小时全量备份,业务方却期望丢数据不超过五分钟——这个差距只能靠 binlog 增量补上。
| 数据类型 | RPO | RTO | 典型方案 |
|---|---|---|---|
| 核心交易库 | ≤ 5 分钟 | ≤ 1 小时 | 主从 + binlog 持续归档 + 定期全量 |
| 一般业务库 | ≤ 1 小时 | ≤ 4 小时 | 每小时增量 + 每日全量 |
| 静态资源与对象存储 | 近似 0 | ≤ 30 分钟 | 版本控制 + 跨区复制 |
| 分析型与日志数据 | ≤ 24 小时 | ≤ 1 天 | 每日全量,允许从源头重建 |
写下 RPO/RTO 之后要立刻算一遍成本:RPO 从 1 小时缩到 5 分钟,增量归档频率提高 12 倍,存储与传输都会跟着涨。这个账必须在方案评审时摆出来,否则半年后会被账单倒逼着改回去。
全量、增量、差异与保留代次
- 全量:恢复最快,占用最大,作为基线定期做。
- 增量:只备变化块,最省最快,但恢复要按链回放,链上任一环损坏就断。
- 差异:备自上次全量以来的变化,恢复只需全量加一份差异,是可靠性与成本的折中。
- 保留代次:常见做法是日备留 7 代、周备留 4 代、月备留 12 代,按合规要求调整,而不是无脑全留。
增量链要定期合成全量,否则恢复时间会随链长线性增长,最后超出 RTO。这一点在小团队里极易被忽略:平时每天加一盘磁带很轻松,真出事时回放三百个增量就没人扛得住。
恢复演练的四个检查项
- 能否解压或解密:加密备份的密钥是否还在、权限是否还在。这一步失败的比例比想象高,尤其是密钥跟着备份一起存在同一台机器上的场景。
- 能否起服务:在隔离环境里真正启动应用并完成一次读写,而不是只看数据库进程有没有起来。
- 数据一致性:核对行数、校验和、关键业务表的最近更新时间,确认恢复到的是预期时间点,而不是「一个能连上的空库」。
- 耗时是否在 RTO 内:从开始恢复计时到服务可用,这才是 RTO 的真实值,不是文档上写的值。
频率建议每季度一次完整演练、每月一次抽样恢复,并把结果写成记录:谁恢复的、恢复到哪个时间点、耗时多少、发现了什么问题。没有记录的演练和没做没有区别,因为下次没人知道上次踩过什么坑。
数据库备份的一致性
热备最常见的坑是「备份能恢复,但数据不自洽」。InnoDB 表用逻辑导出必须加一致性快照参数,MyISAM 表则需要锁表。更稳的做法是物理备份加 binlog 归档:全量给基线,binlog 给时间点恢复,两者配合才能做到分钟级 RPO。
mysqldump --single-transaction --quick --routines --triggers
--master-data=2 --set-gtid-purged=ON
--databases app_db > app_db_$(date +%F).sql
--single-transaction 让整个导出落在一个一致性快照里,不锁业务写入;--master-data=2 把当时的 binlog 位点以注释形式写进备份头部,这正是时间点恢复的起点。恢复顺序是先导入全量,再用 mysqlbinlog 回放到目标时间点之前,跳过误操作那一段。
异地副本的成本取舍
异地副本的边际成本不在存储费,而在传输费和取回费。跨区复制按流量计费,冷归档取回又按请求数与时长计费,两者叠加后,一份「看起来便宜」的异地副本可能比生产存储还贵。合理的做法是分级:核心数据实时跨区,一般数据每日跨区,可重建数据只保留本地多副本。
带宽与流量的计费细节可以对照 带宽与流量计费 先算一遍再定架构,别等第一次全量复制把出口流量跑满才发现。
加密与权限:不要共用一把钥匙
- 备份加密密钥与生产密钥分离,且不要放在被备份的那台机器上。
- 备份账号只授予写入目标桶的权限,不给删除权限;开启对象存储的版本控制与对象锁。
- 恢复账号与备份账号分开,恢复操作单独留审计日志。
- 密钥要有托管与轮换方案,密钥丢失等同于备份丢失。
这些要求与主机侧加固是同一套逻辑:账号、端口、审计三件事先收干净,备份才有意义。可以先按 云服务器安全加固清单 过一遍。如果备份目标是对象存储,注意版本控制、合规锁与跨区复制在各家的实现差异,选型可参考 对象存储对比;预算紧张时,用 成本优化 里的思路先区分冷热再决定副本数量。
常见问题
备份文件的校验和一致,就算验证通过了吗?
不算。校验和只能证明文件没被损坏,不能证明里面是完整可恢复的数据。真正有效的验证必须做一次恢复并核对业务数据,至少要能起服务、能查到最近写入的记录。
小团队没有异地机房,怎么做「一份异地」?
用对象存储的不同区域就够了,成本远低于自建机房。另一个低成本方案是定期把加密备份写到离线介质并异地存放,虽然人工,但能挡住账号被盗这类风险。
备份应该保留多久?
先看合规要求,没有要求就按「日 7、周 4、月 12」起步,即大约一年。保留期越长,越要依赖冷存储和去重,否则成本会随代次线性上涨。
云厂商的自动快照能替代自建备份吗?
不能完全替代。快照通常与实例或云盘绑定,账号级事故、误删整盘、跨账号迁移这些场景下容易一起失效。快照适合做短周期回滚,长期合规备份仍要独立存放并定期做恢复演练。
延伸阅读
- 对象存储怎么选:OSS、S3 与自建 MinIO 对比:异地副本的版本控制、对象锁与取回计费差异都在这里。
- 云服务器带宽与流量计费:怎么避免月底账单翻倍:跨区复制的流量是容灾方案里最容易被低估的一项。
- 云服务器安全加固实战清单:上线前必须做的 10 件事:账号权限与审计没做干净,备份账号同样会被拿走。
- 云计算成本优化(FinOps)实战:把月度账单砍掉 30%:备份存储的分层与去重,是成本优化里见效最快的一块。
- 什么是云服务器?与物理服务器、VPS 的区别讲清楚:理解快照与云盘的边界,才知道哪些能力不能当作备份。
- 服务器监控告警怎么搭:从指标采集到告警收敛:备份任务失败要能第一时间知道,靠的就是监控告警。