Skip to content

05 - 日志系统

定位:日志是 MySQL 可靠性的基石——理解三种日志的分工协作,就理解了 MySQL"不出错"的秘密 面试高频度:⭐⭐⭐⭐⭐


一、板块在体系中的位置

┌──────────────────────────────────────┐
│      03-SQL与事务                     │
│      04-锁机制                        │
└────────────────┬─────────────────────┘

┌──────────────────────────────────────┐
│      05-日志系统 (本板块)             │
│  ┌──────┐ ┌──────┐ ┌──────┐ ┌────┐ │
│  │Redo  │ │Undo  │ │Binlog│ │2PC │ │
│  │Log   │ │Log   │ │      │ │恢复 │ │
│  └──────┘ └──────┘ └──────┘ └────┘ │
└───────┬──────────────────────────────┘


┌──────────────────────────────────────┐
│      07-性能调优 (Buffer Pool 等)     │
└──────────────────────────────────────┘

二、知识全景图

MySQL 日志体系

├── Redo Log(重做日志)— InnoDB 引擎层
│   ├── 作用: 保证持久性(已提交不丢)
│   ├── 特点: 物理日志、循环写入、WAL
│   └── 内容: "对某个数据页做了某个修改"

├── Undo Log(回滚日志)— InnoDB 引擎层
│   ├── 作用: 保证原子性(未提交能回滚)+ MVCC
│   ├── 特点: 逻辑日志、版本链
│   └── 内容: "修改前数据的旧版本"

├── Binlog(二进制日志)— Server 层
│   ├── 作用: 主从复制 + 数据恢复
│   ├── 特点: 逻辑/物理日志、追加写入
│   └── 三种格式: STATEMENT / ROW / MIXED

└── 两阶段提交 (2PC)
    ├── Prepare: Redo Log prepare
    ├── Commit: Binlog 写入 → Redo Log commit
    └── 保证: Redo Log 和 Binlog 的一致性

三、子专题导航

#主题面试频率核心内容
[[avazoe/MySQL/05-日志系统/05.1-Redo Log05.1-Redo Log]]Redo Log 详解⭐⭐⭐⭐⭐
[[avazoe/MySQL/05-日志系统/05.2-Undo Log05.2-Undo Log]]Undo Log 详解⭐⭐⭐⭐
[[avazoe/MySQL/05-日志系统/05.3-Binlog05.3-Binlog]]Binlog 详解⭐⭐⭐⭐⭐
[[avazoe/MySQL/05-日志系统/05.4-两阶段提交与崩溃恢复05.4-两阶段提交与崩溃恢复]]两阶段提交与崩溃恢复⭐⭐⭐⭐⭐

四、核心考点速记

考点1:三种日志对比

维度Redo LogUndo LogBinlog
所在层InnoDB 引擎层InnoDB 引擎层MySQL Server 层
日志类型物理日志逻辑日志(反向)逻辑/物理日志
写入方式循环写(固定大小)循环/独立表空间追加写(滚动)
作用Crash Recovery(持久性 D)Rollback + MVCC(原子性 A)复制 + PITR(时间点恢复)
刷盘配置innodb_flush_log_at_trx_commit自动管理sync_binlog

考点2:Redo Log 为什么比写数据文件快?

对比维度Redo Log 写入数据文件写入
写入方式顺序追加(文件末尾)随机位置(页所属位置)
写单位日志记录(几百字节)完整数据页(16KB)
磁盘性能顺序写(~500MB/s)随机写(~5MB/s,取决于 IOPS)

考点3:两阶段提交的核心流程

事务提交:
  Step 1: Redo Log prepare  ← (状态: prepare)
  Step 2: Binlog 写入成功    ← (状态: binlog written)
  Step 3: Redo Log commit   ← (状态: commit)

崩溃恢复检查:
  Redo Log 状态               Binlog 状态             恢复动作
  prepare                    ❌ 未写入                 回滚事务
  prepare                    ✅ 已写入                 提交事务(补 commit)
  commit                     ✅ 已写入                 无需操作(已完整提交)

📚 相关文件

  • 上游板块:**锁机制**
  • 下游板块:**性能调优**
  • ← 返回 **设计文档**

Knowledge4J — Java 知识库