MySQL 中的 redo log
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 的数据可靠性。