不接触生产,恢复 52 亿行

英文版:English

纠正前提

最初的方案假设被数据库 TTL 过期的行能从在线卷上找回。这个假设是错的,而证明它错就是第一份交付物:这个引擎的 TTL 删除会物理 unlink 数据 part,也不存在能接住它们的 S3 分层。在线系统上没有任何可恢复的东西,而在在线磁盘上做实验来确认这一点,是只有风险没有收益。

恢复架构

真实存在的是生产卷的不可变每日 EBS 快照序列。恢复路径:把快照物化成一块全新的独立卷,挂到一个独立的数据库实例上,在那里验证。全程不对任何在线磁盘做 attach/detach,任何时刻不连接任何生产系统。爆炸半径不是「被管理」,而是结构性为零,执行前即可从设计证明。

用数字验证

恢复出的数据集在线可查:51.98 亿行 / 4.07 TiB。全量 count(*) 用时 50 秒;全表冷聚合 83 秒。没被查询过的恢复不算恢复:挂上的卷证明的是存储,不是数据。

诚实的边界

两条边界,刻意点名。隐含 RPO 约 24 小时:每日快照序列就给你这么多,而在这次演练之前没人把它写成 SLA。这是一次证明路径可行的一次性演练,还不是有日程的 DR 制度。两个缺口现在都是显式的,这正是「缺口」与「意外」的区别。

恢复演练最有用的产出很少是数据本身,而是被纠正的假设,和那些此前没人被迫写下的数字(RPO、恢复时长)。