加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 站长资讯 > 动态 > 正文

跟着老司机吃透Redo log 与 Binlog

发布时间:2021-04-12 12:05:42 所属栏目:动态 来源:互联网
导读:edo log 1.Redo log 解决了什么问题? MySQL应用中处理事务是一个重要的任务,而在事务处理的四个特性中(ACID),存在一个持久性(Durability),它表示在事务执行过程中,对数据的所有改动都必须在事务成功结束前保存至某种物理存储设备中。 换句话说,只要事务

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 的运行流程。

  • 1. 从MySQL客户端请求语句“update T set a=1 where id=2”,并发现MySQL Server 层。
  • 2. 接收到SQL请求以后MySQL Server 层会对其进行分析、优化、执行等处理工作,将生成的SQL执行计划发到存储引擎层执行。
  • 3. 存储引擎层将“a修改为1”的这个操作记录到内存中。
  • 4. 记录到内存以后会修改redo log 的记录,会在添加一行记录,其内容是“需要在哪个数据页上做什么修改”。
  • 5. 此后,将事务的状态设置为prepare ,说明已经准备好提交事务了。
  • 6. 等到MySQL Server 层处理完事务以后,会将事务的状态设置为commit,也就是提交该事务。
  • 7. 在收到事务提交的请求以后,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所示:

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读