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

2024-07-26 01:26:16 浏览数 (1)

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

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

Undo Log回滚日志

用处

代码语言:javascript复制
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的区别

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

0 人点赞