MySQL 使用 Redo Log 崩溃恢复过程分析

作者:微信小助手

发布时间:2023-05-24T21:53:21

你好,我叫拥抱拥抱硬核技术和对象,面向人民币编程的码哥。

天有不测风云,数据库有旦夕祸福。

前面写 Redo 日志的文章介绍过,数据库正常运行时,Redo 日志就是个累赘。

现在,终于到了 Redo 日志扬眉吐气,大显身手的时候了。

本文我们一起来看看,MySQL 在崩溃恢复过程中都干了哪些事情,Redo 日志又是怎么大显身手的。

本文介绍的崩溃恢复过程,包含 server 层InnoDB,不涉及其它存储引擎,内容基于 MySQL 8.0.29 源码。

目录

  • 1. 概述

  • 2. 读取两次写页面

  • 3. 恢复数据页

    • 3.1 找到 last_checkpoint_lsn

    • 3.2 修复损坏的数据页

    • 3.3 读取 Redo 日志

    • 3.4 应用 Redo 日志

  • 4. 删除 undo 表空间

  • 5. 初始化事务子系统

  • 6. 重建 undo 表空间

  • 7. 处理事务

    • 7.1 清理已提交事务

    • 7.2 回滚未提交 DDL 事务

    • 7.3 回滚未提交 DML 事务

    • 7.4 处理 PREPARE 事务

  • 8. 总结


1. 概述

MySQL 崩溃也是一次关闭过程,只是比正常关闭着急了一些。

正常关闭时,MySQL 会做一系列收尾工作,例如:清理 undo 日志、合并 change buffer 缓冲区等操作。