第9章学习笔记:日志、恢复与高可用基础
课程笔记理解 WAL、检查点、撤销重做与备份恢复,把‘提交成功’落实为可恢复证据。
关联:章节 第9章 日志、恢复与高可用基础
第9章笔记:日志、恢复与高可用基础
本章不是七个并列名词
理解 WAL、检查点、撤销重做与备份恢复,把‘提交成功’落实为可恢复证据。 学习顺序从《故障分类与恢复目标》开始,到《恢复演练与证据清单》闭合。每一节都要留下下一节能直接使用的对象:模式、关系、查询结果、页、计划、事务状态、日志记录或部署证据。若你只能逐条背定义,却说不清前一节输出怎样成为后一节输入,这一章还没有真正连起来。
七节依赖与例题
1. 故障分类与恢复目标
要解决的问题: 事务故障、进程崩溃、介质损坏和站点灾难需要不同机制;RPO 约束可丢数据量,RTO 约束恢复时间。
跟着做: 误删一行可由事务回滚,磁盘损坏需备份与日志,机房不可用需异地副本;只有本机重启脚本不算灾备。
验收规则: 恢复设计先给故障模型,再给 RPO/RTO 数值和演练证据。
2. WAL:先写日志再写数据页
要解决的问题: 日志记录变更与事务边界;脏数据页落盘前,对应日志必须先持久化,提交确认前提交记录必须稳定。
跟着做: 余额页在后台提前刷盘也安全,因为崩溃后可从日志识别未提交更新并撤销;若日志没先落盘就无法解释。
验收规则: WAL 规则:log record stable before data page;commit record stable before success response。
3. UNDO、REDO 与幂等恢复
要解决的问题: UNDO 消除未提交事务影响,REDO 重放已提交但未落盘影响;恢复操作应可重复执行而不破坏正确结果。
跟着做: 崩溃时 T1 已提交但页未写,需要 REDO;T2 的页已写但未提交,需要 UNDO。
验收规则: 恢复依据日志与页 LSN 判断是否需要重做,补偿日志保证撤销过程本身也可恢复。
4. 检查点与 ARIES 直觉
要解决的问题: 检查点不等于把所有脏页写盘,而是缩短分析起点并记录活动事务与脏页;ARIES 经分析、重做、撤销恢复。
跟着做: 模糊检查点允许业务继续,重启后从最早必要 LSN 重做,再按 loser 事务逆向撤销。
验收规则: 恢复三阶段:analysis 重建状态,redo 重现历史,undo 回滚失败事务。
5. 备份、增量与时间点恢复
要解决的问题: 全量备份提供基线,增量和归档日志缩小传输与恢复范围;备份只有经过恢复演练才可信。
跟着做: 周日全量、每日增量、持续归档日志可恢复到误操作前一秒;若日志链中断,宣称 RPO=0 没有依据。
验收规则: 可恢复时间点由最近可用基线与连续日志区间的交集决定。
6. 复制、故障转移与一致性代价
要解决的问题: 同步复制降低数据丢失但增加提交延迟,异步复制延迟低却可能丢最后一段;故障转移要防双主。
跟着做: 主库失联时不能仅凭单节点自荐为主,应依赖仲裁、租约或 fencing,避免网络分区下两边同时接受写入。
验收规则: 高可用不等于灾备;可用性、持久性与一致性要在明确故障模型下权衡。
7. 恢复演练与证据清单
要解决的问题: 演练要从干净环境按文档恢复、校验约束与业务指标、记录耗时,并验证密钥与权限也可取得。
跟着做: 季度随机选备份恢复到隔离环境,对订单数、金额和关键哈希做核对,再模拟切换和回切。
验收规则: 验收证据至少含备份时间、恢复点、数据校验、RTO、未覆盖风险与整改负责人。
章内共同推理方法
先写“一行或一个状态代表什么”,再写它必须满足的键、约束、顺序或故障假设。遇到 SQL,先定结果粒度和重复/NULL 语义,再编码;遇到存储与优化,先估算页数、基数和 I/O,再看真实执行计划;遇到事务与分布式,先画时间线和允许历史,再讨论隔离级别、日志或共识。任何公式都要带单位、数据分布和适用边界。
可复现练习
从本章七个例题中任选两个,用 SQLite 或课程给定模型从空环境重做。保存建表/输入、执行步骤、实际输出和断言;随后故意加入一个重复键、NULL、并发交错、崩溃点、倾斜分布或网络分区,记录第一个被破坏的不变量。只截成功界面、只贴 SQL 或只报告耗时不算完成。
闭卷验收
用十分钟画出本章七节箭头图;任选一条箭头解释传递的具体字段、状态或证据。再为《恢复演练与证据清单》写一个最小失败案例,并追溯它需要《故障分类与恢复目标》中的哪条定义才能修复。最后列出三道题:一道唯一答案判断、一道多条件选择、一道必须计算或写 SQL/状态轨迹的问题,且每题都写清为什么其他答案错。