2026年深入理解MySQL三大日志:binlog、redo log、undo log,一文彻底搞懂!

深入理解MySQL三大日志:binlog、redo log、undo log,一文彻底搞懂!一句话总结 MySQL 的三大日志是保证数据安全 事务可靠 主从同步的核心机制 面试必问 但 90 的人只知其表不知其里 本文用生活化比喻 原理图解 带你真正掌握它们 在面试中被问到 MySQL 如何保证数据不丢失 你是否曾支支吾吾 面对 binlog 和 redo log 有什么区别 是否只能含糊回答 真相是 90 的开发人员对 MySQL 三大日志的理解停留在表面

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



💡 一句话总结:MySQL的三大日志是保证数据安全、事务可靠、主从同步的核心机制。面试必问,但90%的人只知其表不知其里。本文用生活化比喻+原理图解,带你真正掌握它们!


在面试中被问到"MySQL如何保证数据不丢失?",你是否曾支支吾吾?面对"binlog和redo log有什么区别?",是否只能含糊回答?

真相是:90%的开发人员对MySQL三大日志的理解停留在表面,导致在实际工作中遇到数据不一致、主从延迟、事务回滚等问题时手足无措。

今天,我将用最生活化的比喻+原理图解,带你彻底搞懂MySQL的三大日志——binlog、redo log、undo log。读完本文,你不仅能轻松应对面试,还能在实际工作中精准定位和解决日志相关问题。


(图1:三大日志核心对比图,清晰展示所属层、日志类型、作用、写入方式、重要参数)

日志类型所属层日志类型作用写入方式重要参数生活化比喻 binlogServer层逻辑日志主从复制、时间点恢复追加写 操作记录本:记录"做了什么",用于复制和恢复 redo logInnoDB引擎层物理日志崩溃恢复、保证持久性循环写 草稿本:记录"怎么改的",用于崩溃后恢复 undo logInnoDB引擎层逻辑日志事务回滚、MVCC逻辑删除 历史版本记录:记录"改前是什么",用于回滚和多版本

💡 关键洞察:理解这三者的区别,就等于理解了MySQL如何在保证性能的同时,确保数据安全。


binlog(Binary Log)是MySQL Server层的逻辑日志,以二进制形式记录所有对数据库的更改操作(DDL和DML语句,不包括SELECT)。

生活化比喻:想象你有一本"操作记录本",每次修改数据都会在上面记录一笔,比如"今天把A账户的钱转到B账户"。

  • 主从复制:主库将binlog发送给从库,从库重放日志实现数据同步
  • 时间点恢复:通过工具回放binlog,将数据库恢复到某个时间点
  • 审计:记录所有数据库变更,用于安全审计
格式记录内容优点缺点适用场景 STATEMENT原始SQL语句日志量小可能主从不一致(如NOW())早期版本,已较少用 ROW每一行数据的变化最安全,不会主从不一致日志量大 生产推荐,保证一致性 MIXED自动判断折中方案复杂场景可能有意外可选,但ROW更可靠

✅ 生产建议:,虽然日志量稍大,但能避免很多主从不一致问题。

值刷盘行为安全性性能0仅写入文件系统缓存最差(操作系统崩溃可能丢数据)最好1每次事务提交都强制刷盘 最安全(不会丢数据)最差N每N个事务提交后刷盘中等(丢失N个事务)较好

✅ 生产建议:,保证事务提交后binlog一定落盘,不丢数据。


问题:如果每次更新都直接写磁盘,随机I/O会导致性能极差。

解决方案:WAL(Write-Ahead Logging)技术——先写日志,后写磁盘

💡 生活化比喻:你写日记时,先在草稿本上记下今天的事(redo log),等有空了再工整地誊写到正式日记本上(数据文件)。如果突然有事打断,你还可以根据草稿本重新誊写。

  • redo log buffer:内存中的日志缓冲区
  • redo log file:磁盘上的日志文件(固定大小,循环使用)

写入过程

  1. 事务执行修改时,先将redo日志写入redo log buffer
  2. 事务提交时,根据刷盘策略将buffer中的日志刷到redo log file
  3. redo log file写满后,会覆盖最早的部分(但必须保证覆盖前对应的脏页已经刷盘)
取值含义安全性性能0每秒将redo log buffer刷到文件系统缓存并刷盘最差(事务提交可能丢1秒内数据)最好 1 每次事务提交都将buffer刷到文件系统缓存并刷盘 最安全(不丢数据)最差2事务提交时只刷到文件系统缓存,每秒刷盘中等(操作系统崩溃可能丢数据)中等

✅ 生产建议:,这是crash-safe的保证。

redo log确保了crash-safe:即使数据库突然宕机,重启后也能通过redo log恢复已提交但未写入磁盘的事务,保证数据不丢失。


undo log是InnoDB引擎的逻辑日志,记录了"如何撤销修改"的操作步骤。

生活化比喻:当你修改了文档后,系统自动保存了修改前的版本,这样你随时可以回退到修改前的状态。

  • 事务回滚:当事务执行失败或执行ROLLBACK时,利用undo log将数据恢复到修改前的状态
  • MVCC(多版本并发控制) :为InnoDB实现可重复读隔离级别提供支持,让读操作不阻塞写操作

在InnoDB中,每行数据都有三个隐藏列:

  • DB_TRX_ID:最近修改/插入该行的事务ID
  • DB_ROLL_PTR:回滚指针,指向该行上一个版本的undo log
  • DB_ROW_ID:隐含的自增ID(如果没有主键时使用)

当一条记录被多次修改时,通过DB_ROLL_PTR将多个版本串联成版本链,undo log中保存的就是这些历史版本。

(图2:MVCC版本链示意图,展示DB_ROLL_PTR如何串联多个版本)

在可重复读隔离级别下:

  • 事务启动时会创建一个视图(Read View)
  • 当读取某行记录时,会根据undo log版本链找到第一个"可见"的版本

💡 关键点:可重复读之所以能实现,正是因为undo log保存了历史版本。


如果不用两阶段提交,可能会发生以下情况:

  • 先写redo log后写binlog:写完redo log后宕机,重启后通过redo log恢复数据,但binlog没记录,导致从库数据不一致
  • 先写binlog后写redo log:写完binlog后宕机,重启后binlog记录了修改,但redo log没记录,主库丢失了修改,导致主从不一致
  1. Prepare阶段:将redo log写入redo log buffer,状态设为prepare
  2. Commit阶段
    • 先写binlog
    • 再将redo log状态改为commit
  • 如果写完redo log(prepare)后、写binlog前宕机:重启后,发现redo log是prepare状态,且binlog没写,就回滚事务
  • 如果写完binlog后宕机:重启后,发现redo log是prepare状态,但binlog已写,就提交事务

✅ 关键结论:两阶段提交保证了redo log和binlog在任何时刻都是一致的。


维度redo logbinlog 所属层InnoDB引擎层Server层 日志类型物理日志(记录页修改)逻辑日志(记录SQL或行变更) 写入方式循环写,固定大小追加写,可无限增长 作用崩溃恢复(保证持久性)主从复制、备份恢复 两阶段提交参与参与

不能。undo log由InnoDB的purge线程自动清理。当undo log不再被任何事务需要(没有活跃事务引用、且不被任何MVCC快照需要)时,会被标记为可回收,purge线程会定期清理。

大事务长时间不提交,它产生的undo log不能被清理。同时,如果有其他长查询需要读取旧版本,也会导致undo log被保留。生产环境要避免大事务

  1. 从最新的checkpoint开始扫描redo log
  2. 将redo log中已提交但未写入磁盘的事务重做(REDO)
  3. 对于prepare状态但binlog没写的事务,回滚(ROLLBACK)
  4. 对于prepare状态且binlog已写的事务,提交(COMMIT)

这取决于刷盘设置:

  • 如果且,理论上不会丢数据
  • 如果设置为其他值,可能会丢一部分最近提交的事务数据

日志类型配置项推荐值作用 binlog保证主从一致性 binlog确保事务提交后binlog落盘 redo log保证事务持久性 undo log自动清理undo log

  • 误区1:认为binlog和redo log是同一类日志 → 它们分属不同层,作用不同
  • 误区2:认为性能最好,可以使用 → 生产环境必须设为1
  • 误区3:认为undo log只用于回滚 → 它还是MVCC的核心

MySQL的三大日志——binlog、redo log、undo log——是理解MySQL数据持久性、崩溃恢复、事务特性(ACID)以及主从复制的基石

掌握它们,你不仅能:

  • 在面试中轻松应对”MySQL怎么保证数据不丢失”这类问题
  • 在实际工作中精准定位和解决数据不一致问题
  • 在高并发场景下优化数据库性能

一句话总结:这三大日志不是”可有可无”的特性,而是MySQL保证数据安全的”生命线”。

🔥 最后提醒:在电商大促、金融交易等关键业务场景,一个对日志机制的误解可能导致数百万的损失。请务必深入理解它们!

欢迎关注我的公众号【SilkyStarter】,获取更多Java技术干货、面试经验和实战心得!

小讯
上一篇 2026-03-21 15:30
下一篇 2026-03-21 15:28

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/239935.html