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 Log | 05.1-Redo Log]] | Redo Log 详解 | ⭐⭐⭐⭐⭐ |
| [[avazoe/MySQL/05-日志系统/05.2-Undo Log | 05.2-Undo Log]] | Undo Log 详解 | ⭐⭐⭐⭐ |
| [[avazoe/MySQL/05-日志系统/05.3-Binlog | 05.3-Binlog]] | Binlog 详解 | ⭐⭐⭐⭐⭐ |
| [[avazoe/MySQL/05-日志系统/05.4-两阶段提交与崩溃恢复 | 05.4-两阶段提交与崩溃恢复]] | 两阶段提交与崩溃恢复 | ⭐⭐⭐⭐⭐ |
四、核心考点速记
考点1:三种日志对比
| 维度 | Redo Log | Undo Log | Binlog |
|---|---|---|---|
| 所在层 | 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 ✅ 已写入 无需操作(已完整提交)📚 相关文件
- 上游板块:**锁机制**
- 下游板块:**性能调优**
- ← 返回 **设计文档**