专栏首页Nicky's blogMySQL系列之事务日志Redo log学习笔记

MySQL系列之事务日志Redo log学习笔记

MySQL系列之事务日志Redo log学习笔记

学习本博客之前需要储备知识:

  • MySQL体系架构
  • InnoDB存储引擎
  • MySQL事务知识

在上篇博客,我们知道了undo log,继续上篇博客,学习另外一种重要的InnoDB事务日志redo log

1、Redo Log

1.1、什么是Redo log?

Redo :重做的意思,undo是撤销回滚意思 Redo log:被称之为重做日志,是在数据库发生意外时,进行数据恢复,redo log会备份是事务执行过程中的修改数据,redo log备份的是事务过程中最新的数据位置

1.2、Redo log工作原理

前面的学习,我们知道undo log是用于回滚的日志记录,是属于逻辑日志,而本博客介绍的redo log是一种物理日志,只要用于预防系统冗机等特殊情况,出现这种情况时,重启mysql会读取redo log,从而实现某些数据未写入磁盘的数据写到磁盘进行持久保存

基于上一章博客的图,进行拓展,对比一下undo log和redo log

  • undo log和redo logo都是InnoDB的功能,都是事务日志
  • undo log是逻辑日志,记录是操作记录日志,redo log是物理日志,记录的是新数据
  • undo log是为了保证事务原子性而设计的,redo log是为了保证事务持久性设置的。undo log在InnoDB中用来实现多版本控制,执行rollback操作时,undo log可以作为事务回滚的快照读参考,而redo log是备份的最新数据位置,系统冗机时,只要重启mysql服务,就可以将未持久保存的数据持久到磁盘

1.3、Redo log写入机制

  • write point:这个指针记录当前位置,一边写,一边移动,写到最后一个文件末尾后就回到 0 号文件重新覆盖写
  • check point:这个指针记录当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数据文件

引用51博客的图例:图来自https://blog.51cto.com/wangwei007/2287431

redo log写满时候,指针回到原点,重新开始覆盖保存,如果 write pos 追上checkpoint,表示写满,这时候不能再执行新的更新,得停下来先擦掉一些记录,把checkpoint推进一下节点

1.4、Redo log配置参数

通过命令查看redo log参数:

show variables like '%innodb_log%';

1.5、Redo数据持久策略

【拓展知识】,每个InnoDB存储引擎至少有1个日志重做文件组(redo file group),每个文件组至少有2个redo日志文件,默认为ib_logfile0ib_logfile1,存储路径在${datadir}

Redo Buffer 持久化到 Redo Log 的策略,通过变量 innodb_flush_log_at_trx_commit 的值来决定

  • 0:设置值为0,表示Log Buffer中的数据不经过OS缓存,直接调用fsync直接刷到磁盘文件保存
  • 1:设置值为1(默认值),事务提交后,会保存到log buffer,接着保存到os buffer缓存,同时调用fsync同步刷到磁盘
  • 2:设置值为2,数据不写到log buffer,直接缓存到os buffer,每隔一秒,调用fsync刷数据到磁盘

附录:参考资料

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL系列之事务日志Undo log学习笔记

    Undo日志:undo log是mysql中两种比较重要的事务日志,另外一种是redo log,undo log顾名思义,是一种用于撤销回退的日志,用于事务没提...

    SmileNicky
  • 搭建本地SAE开发环境

    为了方便开发者测试开发,SAE提供了本地开发环境,能模拟SAE的大部分功能也服务,在本地开发测试,不用频繁上

    SmileNicky
  • MySQL应用之CROSS JOIN用法简介教程

    MySQL cross join是mysql中的一种连接方式,区别于内连接和外连接,对于cross join连接来说,其实使用的就是笛卡尔连接。在MySQL中,...

    SmileNicky
  • 【MySQL (六) | 详细分析MySQL事务日志redo log】

    为了最大程度避免数据写入时 IO 瓶颈带来的性能问题,MySQL 采用了这样一种缓存机制:

    周三不加班
  • MySQL 日志(redo log 和 undo log) 都是什么鬼?

    innodb事务日志包括redo log和undo log。redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作。

    Java技术栈
  • 生产环境日志清理脚本

    生产上有40多个微服务部署的应用,每个应用都会产生日志,随着时间的增长,日志量不断增大,现需要清理。有两个重要的应用日志需保留90天,其它应用保留20天。

    loong576
  • 每个程序员都应该收藏的算法复杂度速查表

    这篇文章覆盖了计算机科学里面常见算法的时间和空间的大 O(Big-O)复杂度。我之前在参加面试前,经常需要花费很多时间从互联网上查找各种搜索和排序算法的优劣,以...

    哲洛不闹
  • 每个程序员都应该收藏的算法复杂度速查表

    算法复杂度这件事 这篇文章覆盖了计算机科学里面常见算法的时间和空间的大 O(Big-O)复杂度。我之前在参加面试前,经常需要花费很多时间从互联网上查找各种搜索和...

    用户1667431
  • shell脚本快速入门之-----函数

    函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。像其他编程语言一样,shell也支持函数。shell函数必须先定义后使用

    不吃小白菜
  • 深入学习MySQL 02 日志系统:bin log,redo log,undo log

    上一篇文章中,我们了解了一条查询语句的执行过程,按理说这篇应该讲一条更新语句的执行过程,但这个过程比较复杂,涉及到了好几个日志与事物,所以先梳理一下3个重要的日...

    KEN DO EVERTHING

扫码关注云+社区

领取腾讯云代金券