跟着老司机吃透Redo log 与 Binlog
|
edo log 1.Redo log 解决了什么问题? MySQL应用中处理事务是一个重要的任务,而在事务处理的四个特性中(ACID),存在一个持久性(Durability),它表示在事务执行过程中,对数据的所有改动都必须在事务成功结束前保存至某种物理存储设备中。 换句话说,只要事务提交成功,那么对数据库做的修改就被永久保存下来了,不可能因为任何原因再回到原来的状态。那么为什么要在MySQL中考虑事务持久性的问题呢?假设这么一种场景,当数据存储的事务正在执行但是数据还没有保存的时候,数据库宕机了,那么这些没来得及存储到磁盘的数据就丢失了,如果此时有一种机制能够记录这个事务的操作,当数据库服务恢复的时候,运行记录的操作那么这些没有来得及存储的数据就能够正确保存了。 Redo log 就是通过这种手段来实现事务持久性的。上面的场景中是数据库服务器宕机,如果发生其他故障导致尚有脏页未写入磁盘的场景,也是可以通过Redo log恢复的。 1.Redo log的执行流程 了解了为什么使用redo log 以后再来看看其执行流程,如图1 所示:图由MySQL客户端、MySQL Server 层和MySQL 存储引擎层组成,由于redo log是在Innodb存储引擎中使用的,这里假设存储引擎就是Innodb。由于MySQL Server 层主要负责SQL语句的分析、优化和执行工作,而MySQL存储引擎层主要负责存储工作,redo log 也运行在这一层。 跟随图中的序号来看看redo log 的运行流程。
2Redo log的写入方式 从上面介绍的Redo log 的执行流程中不难看出,redo log在写入磁盘之前会先将内容写到内存中。因此,redo log的写入包括两部分内容:一部分是内存中的日志缓冲,称作redo log buffer;另一部分是磁盘日志文件,称作 redo log file。MySQL每执行一条DML语句,先将更新记录写入redo log buffer ,然后再写入redo log file。我们将这种先写日志,再写磁盘的方式称为 WAL(Write-Ahead Logging)技术。
如图2所示: (编辑:开发网_开封站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |




浙公网安备 33038102330459号