MySQL中的redo log

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`

MySQL中的Redo Log

在MySQL中,Redo Log(重做日志)是InnoDB存储引擎用来确保事务的ACID特性中的持久性(Durability)。它记录了可能对数据页(在内存中的数据)进行修改的所有操作。即使数据库发生故障,使用Redo Log也可以保证数据不会丢失。

Redo Log的工作原理

1. 写入Redo Log Buffer

  • 当事务对某个数据页进行修改时,首先修改内存中的数据页,同时将这次修改操作记录到Redo Log Buffer中。

2. 刷新到磁盘

  • 事务提交时,或者Redo Log Buffer满了时,会将Redo Log Buffer的内容刷新到磁盘上的Redo Log文件中。这个过程通常称为“同步(flush)”。

3. 保证持久性

  • 在MySQL宕机、掉电等情况下,已经提交的事务不会丢失,因为其修改已记录在Redo Log中。数据库重启时,可以通过Redo Log进行数据页的恢复工作。

Redo Log的组成

Redo Log主要由两部分组成:

1. Redo Log Buffer(内存中)

  • 一块内存区域,用于临时存储即将写入到磁盘上的Redo Log数据。

2. Redo Log Files(磁盘上)

  • 由一组文件构成,默认情况下有两个文件(ib_logfile0和ib_logfile1),InnoDB会以循环的方式写这些日志文件。

Redo Log与Binlog的区别

Redo Log和Binlog是MySQL用来记录数据变更的两种日志,但它们有明显的区别:

  • Redo Log

    • 属于InnoDB引擎特有的日志。

    • 用于保证事务的持久性,是物理日志,记录的是数据页的物理修改操作。

  • Binlog

    • 属于MySQL的服务器层实现,所有引擎都可以使用。

    • 主要是用于复制和数据恢复,是逻辑日志,记录的是SQL语句的逻辑修改操作。

通过Redo Log的机制,可以确保即使在数据库突然崩溃的情况下,所有的提交事务都不会丢失,大大增强了MySQL的数据可靠性。

最后更新于