什么是重做日志

介绍

本篇内容主要讲解“什么是重做日志”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是重做日志”吧!

1什么是重做日志

简单的说重做日志是mysql底层存储引擎innodb的一种日志。最终是保存在磁盘的上的。

一条重做日志中大致记录着有日志类型,表空间id、数据页,数据页中的偏移量,具体修改的数据。也就是说记录了什么操作类型,操作了那个表空间的那个数据页,具体修改了那些值。

简单画个图

什么是重做日志

2, redo 日志存储结构是怎样的

重做日志在硬盘中真实以,表空间id +数据页id +数据页内偏移量+修改了几个字节的数据+实际修改数据存储的么?肯定不是了。

重做日志真正的存储结构是mysql中的一个块。这个块块分为头身体拖车三部分,身体中存放的是真正的数据,头部保存的是一些元数据(比如身体中存储了多少字节的数据,当前块的id多少,重做日志的组,我们一个事务可能会有多个重做日志,这些个重做日志是同一个组里的)

3 redo 日志作用是什么

根据上面我们提到的重做日志存储的数据结构来看,大致可以猜应该是用来做数据恢复,备份啊之类的但是binlog中也有记录啊,怎么要多记录一份呢?里面存储的该行数据的最新信息,难道是容错用的?对的.redo日志是用来事务重做的。

怎么理解这个呢。其实很简单,mysql实际更新数据的时候先更新的内存,然后自何时的时候冲到磁盘上,这个时候如果了机了,此时数据还没来及冲洗到磁盘,内存中的数据会丢失的。

这个就涉及到mysql执行一条sql语句时整体流程了。我们后面再说,这里直接说重做日志了.mysql更新完内存中数据后会在binlog中记录当前事务更新xxxx做归档。然后提交任务(其实就是写重做日志)。在重做日志中做个标记当前事务执行到了那个binlog,偏移量是什么等等。

这样整个事务才算提交完毕。如果此时降机,内存中的数据还么来及冲洗到磁盘上,mysql会扫描当前重做日志日志基于上面的记录找到对应的binlog重新执行边流程。将数据重做到内存和磁盘上。

4 redo  log 写入策略是怎样的

我们上面说到了重做日志是写在一个个的块中的,那是直接写硬盘么?肯定不是,会大大减低更新的性能。

mysql是先写吧重做日志写入到内存中,在何时的机会进行刷盘,但是重做日志缓冲区并不会向缓存页一样那么大默认16 mb。毕竟一个街区就512个字节,。

那什么时候才是平重做日志缓冲区的时候呢?符合以下几点就会执行冲操作:

<李>

如果一个事务涉及到多个重做日志那肯定都要把这些同组的重做日志都刷入磁盘,因为一个事务中要么都成功,要么都失败

<李>

mysql执行关闭的时候,会把所有的块冲到磁盘上。

<李>

异步线程每隔1秒就将缓冲区中的块冲到磁盘上。

<李>

重做日志缓冲区容量占用一半的时候也会触发冲操作

到此,相信大家对“什么是重做日志”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

什么是重做日志