MySQL Redo Log、Undo Log 与 Binlog

MySQL Redo Log、Undo Log 与 Binlog 在学习 MySQL InnoDB 时,经常会遇到三个日志: Redo Log Undo Log Binlog 它们名字相似,但解决的问题完全不同。 简单来说: Redo Log → 数据库崩溃后,恢复已经发生的修改 Undo Log → 事务回滚、MVCC Binlog → 记录数据库逻辑变更,用于复制、恢复等 其中最容易混淆的是: 为什么 InnoDB 已经有 Redo Log 了,MySQL 还需要 Binlog? 原因在于 Redo Log 和 Binlog 所处的层次、记录内容和设计目标并不相同。 理解三者的关系,也是理解 MySQL 事务提交和主从复制的基础。 1. 为什么数据库需要日志 假设执行: UPDATE users SET balance = balance - 100 WHERE id = 1; 最简单的想法是: 修改内存 ↓ 直接把数据写入磁盘 ↓ 完成 但真实数据库不能简单这样做。 原因是磁盘 I/O 成本较高,而且一次事务可能修改很多数据页。...

2024年06月23日 · 4 min · Leanku