MySQL----redo log重做日志原理及流程

重做日志

redo log:重做日志,用于记录事务操作的变化,确保事务的持久性。redo log是在事务开始后就开始记录,不管事务是否提交都会记录下来,在异常发生时(如数据持久化过程中掉电),InnoDB会使用redo log恢复到掉电前的时刻,保证数据的完整性。

原理

在这里插入图片描述
buffer pool缓存池:
作用:加速读和加速写,直接操作data page(数据页),写redo log修改就算完成,有专门的线程去做把buffer pool中的dirty page写入磁盘。

流程

在这里插入图片描述
重做日志的缓冲 (redo log buffer),保存在内存中,是易失的。

重做日志文件 (redo log file),保存在硬盘中,是持久的。

  1. 先将原始数据从磁盘中读入内存中来,修改数据的内存拷贝
  2. 生成一条重做日志并写入redo log buffer,记录的是数据被修改后的值
  3. 当事务commit时,将redo log buffer中的内容刷新到 redo log file,对 redo log file采用追加写的方式
  4. 定期将内存中修改的数据刷新到磁盘中

总结:

  • redo log日志是在事务begin开始以后就记录了,而不是等commit才记录。
  • 数据刷新到磁盘的过程中,出现掉电等异常情况,下一次mysqld服务器重启的时候,会根据redo log里面记录的数据,进行数据恢复!
  • undo log也要记录在redo log中,因为undo log要进行事务回滚,如果在回滚过程中出现异常,也会在redo log中找到undo log里面的内容,重启事务的回滚。
  • 事务最重要的是写redo log,而不是写数据。
  • innodb_log_buffer_size默认是16M,就是redo log缓冲区的大小,它随着事务开始,就开始写redo log,如果事务比较大,为了避免事务执行过程中花费过多磁盘IO,可以设置比较大的redo log缓存,节省磁盘IO。
  • InnoDB修改操作数据,不是直接修改磁盘上的数据,实际只是修改Buffer Pool中的数据。InnoDB总是先把Buffer Pool中的数据改变记录到redo log中,用来进行崩溃后的数据恢复。 优先记录redo log,然后再慢慢的将Buffer Pool中的脏数据刷新到磁盘上。
  • innodb_log_group_home_dir指定的目录下的两个文件:ib_logfile0,ib_logfile1,该文件被称作重做日志。

在这里插入图片描述

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值