记录一次面试被问到的MySQL三大日志之Undo Log、Redo Log与Bin Log

MySQL数据库作为目前最流行的关系型数据库管理系统之一,开发者在面试中经常会被问到这个问题。其中,Undo Log、Redo Log和Bin Log是MySQL中最重要的三种日志,它们各自承担着不同的职责(各司其职),共同保障数据库的数据一致性、持久性和可恢复性。

本篇文章用作个人面试后的复盘,也希望能给各位大佬带来帮助。

在这里插入图片描述

Undo Log回滚日志

用处

Undo Log主要用于实现事务的原子性,保证在事务失败或需要回滚时,能够将数据恢复到事务开始前的状态。

Undo Log主要属于InnoDB存储引擎,它记录了数据修改前的状态,就是记录的“旧值”。当事务需要回滚时,InnoDB引擎可以利用Undo Log中的信息来撤销已做的修改,使数据库恢复到事务开始前的状态。

除此之外呢,Undo Log还可以用于支持多版本并发控制(就是面试中常见的MVCC),允许多个事务并发访问数据库时,每个事务看到的数据都是一致的、未被其他事务干扰的版本。

特点

  • 逻辑日志:Undo Log记录的是数据修改前的逻辑状态,而非物理页面的变化
  • 存储方式:通常以数据页或者回滚段的形式存储在数据库的数据文件中。
  • 触发时机:在事务执行期间,对数据库进行修改操作时,相应的Undo Log记录会被写入Undo Log缓冲区或直接写入Undo Log文件中

Redo Log重做日志

用处

Redo Log主要用于实现事务的持久性,确保在数据库系统发生故障(比如宕机)后,已提交的事务所做的修改不会丢失。

和Undo Log一样,Redo Log也是InnoDB存储引擎特有的,它记录了数据页的物理变化(重!!!),即“新值”。当数据库系统重启时,InnoDB引擎可以利用Redo Log中的信息来恢复数据,从而来确保数据的一致性和完整性。

特点

  • 物理日志:Redo Log记录的是数据页的物理修改,比如数据页的更新、插入或删除。
  • 循环写入:Redo Log文件的大小是固定的,采用循环写入的方式,当日志空间满时,会覆盖最早的日志记录
  • 刷盘策略:InnoDB引擎提供了多种刷盘策略,我们可以调整innodb_flush_log_at_trx_commit参数来控制Redo Log的刷盘时机,从而确保数据的持久性。

Bin Log二进制日志

用处

Bin Log是MySQLServer层生成的日志,ta记录了所有修改数据库数据的SQL语句(比如INSERT、UPDATE、DELETE等),但是不包括SELECT、SHOW等不修改数据的语句。(重点!!!)

Bin Log主要用于数据恢复、主从复制和数据同步。通过Bin Log日志,我们可以在数据库发生故障时恢复数据,或者在主从复制架构中同步数据到从服务器。

特点

  • 逻辑日志:Bin Log记录的是SQL语句的逻辑操作,而不是物理页面的变化(和Redo Log区别开)。
  • 二进制格式:Bin Log以二进制格式存储,可以高效地进行网络传输和存储。
  • 触发时机:在事务提交时,Bin Log会记录此事务的逻辑变更操作。

Undo Log、Redo Log与Bin Log的区别

它们三个的区别大致可以分为四个模块,重点来了!!!👇👇👇

适用对象:

Undo Log和Redo Log是InnoDB存储引擎特有的。
而Bin Log是MySQL Server层生成的,所有存储引擎都可以使用。

记录内容:

Undo Log记录的是数据修改前的状态(旧值),用于回滚和MVCC。
Redo Log记录的是数据页的物理变化(新值),用于崩溃恢复。
Bin Log记录的是修改数据库的逻辑SQL语句,用于数据恢复、主从复制和数据同步。

存储方式:

Undo Log以数据页或回滚段的形式存储在数据文件中。
Redo Log以循环写入的方式存储在专用的Redo Log文件组中。
BinLog以二进制文件的形式存储在文件系统中。

触发时机:

Undo Log在事务执行期间,对数据库进行修改操作时触发。
RedoLog在事务执行期间,对数据库进行物理修改时触发,并在事务提交前或发生崩溃时写入磁盘。
Bin Log在事务提交时触发,记录该事务的逻辑变更操作。

这块知识点是我们开发人员面试中的重中之重!!!希望文章对小伙伴们面试有帮助!

本篇文章到这里就结束了,感谢各位小伙伴们的支持!

在这里插入图片描述

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小威要向诸佬学习呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值