前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记录一次面试被问到的MySQL三大日志之Undo Log、Redo Log与Bin Log

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

原创
作者头像
祁画
发布2024-07-26 01:26:16
920
发布2024-07-26 01:26:16
举报
文章被收录于专栏:技术分享

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的区别

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

适用对象:

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在事务提交时触发,记录该事务的逻辑变更操作。

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Undo Log回滚日志
    • 用处
      • 特点
      • Redo Log重做日志
        • 用处
          • 特点
          • Bin Log二进制日志
            • 用处
              • 特点
              • Undo Log、Redo Log与Bin Log的区别
              相关产品与服务
              云数据库 MySQL
              腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档