⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 http://www.iocoder.cn/Fight/tengxunermianbinlogredologheundologsandarizhidequbie/ 「芋道源码」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

这是一个非常经典的面试题。三大日志是 MySQL 保证数据安全、事务特性和高可用的核心机制,搞清楚它们的区别和协作关系,面试基本稳了。

三大日志一句话定位

  • Redo Log:管”提交了的数据绝对不能丢“(持久性)
  • Undo Log:管”没提交的事务必须能回滚“(原子性)和”读的时候不阻塞写“(MVCC)
  • Binlog:管”数据要能复制和恢复到任意时间点“(归档与同步)

核心区别对比表

特性 Redo Log Undo Log Binlog
所属层级 InnoDB 引擎层 InnoDB 引擎层 MySQL Server 层
日志类型 物理逻辑日志 逻辑日志 逻辑日志
主要用途 崩溃恢复 事务回滚 + MVCC 主从复制 + 数据恢复
写入时机 事务进行中不断写入 修改数据时生成 事务提交后一次性写入
生命周期 循环覆盖写入 事务结束后由 purge 清理 追加写入,可长期保存
存储形式 固定大小文件 ib_logfile0/1 回滚段(表空间一部分) 独立文件序列 mysql-bin.xxx

深入解析

Redo Log:崩溃恢复的”安全气囊”

核心思想:Write-Ahead Logging。数据页的任何修改,必须先写日志再写磁盘。

工作流程:事务修改数据 → 变更写入 Redo Log Buffer → 按策略刷盘到 ib_logfile → 即使崩溃也能根据 Redo Log 重做已提交数据。

为什么需要它:直接写数据页是随机 IO,Redo Log 是顺序追加 IO——将随机写转化为顺序写,性能和安全性都提升了。

Undo Log:回滚与多版本的”时光机”

作用一:事务回滚。执行 ROLLBACK 时,InnoDB 用 Undo Log 中的反向记录恢复数据到事务前状态。

作用二:MVCC。其他事务做快照读时,InnoDB 通过 Undo Log 链构造历史版本,提供一致性视图。这是可重复读(RR)隔离级别的基石。

Binlog:数据同步的”搬运工”

记录模式:

  • Statement:记录原始 SQL
  • Row(默认推荐):记录每行数据变化
  • Mixed:混合模式

核心用途:

  • 主从复制:Master 将 Binlog 发给 Slave 重放
  • 数据恢复:全量备份 + Binlog 可恢复到任意时间点

关键协作:两阶段提交(2PC)

为保证 Redo Log 和 Binlog 的一致性(即主从数据一致),MySQL 使用内部两阶段提交。这是面试高频深入考点。

事务提交时:

  1. Prepare 阶段:InnoDB 将 Redo Log 标记为 PREPARE,刷盘
  2. Write & Fsync Binlog:Server 层写入 Binlog 并刷盘
  3. Commit 阶段:InnoDB 将 Redo Log 标记为 COMMIT

为什么需要 2PC:假设先写 Redo Log 后写 Binlog,中间崩溃 → 主库有数据但从库没有 → 主从不一致。2PC 保证:只要 Binlog 写成功,Redo Log 就必须提交。崩溃恢复时检查 Binlog 中是否有该事务记录,决定提交还是回滚。

面试怎么答

简短版(30 秒):Redo Log 保证持久性——提交的数据不丢;Undo Log 保证原子性和 MVCC——回滚和快照读;Binlog 保证复制和恢复——主从同步和按时间点恢复。三者通过两阶段提交协作,保证 Redo Log 和 Binlog 一致。

加分点:主动提到 WAL 思想(Redo Log 将随机写变顺序写)、MVCC 和 Undo Log 链的关系、2PC 的崩溃恢复逻辑。这三个点能让面试官知道你真的理解了,不是背八股。

文章目录
  1. 1. 三大日志一句话定位
  2. 2. 核心区别对比表
  3. 3. 深入解析
    1. 3.0.1. Redo Log:崩溃恢复的”安全气囊”
    2. 3.0.2. Undo Log:回滚与多版本的”时光机”
    3. 3.0.3. Binlog:数据同步的”搬运工”
  • 4. 关键协作:两阶段提交(2PC)
  • 5. 面试怎么答