MySQL系列之事务日志Redo log学习笔记
时间:2022-07-28
本文章向大家介绍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_logfile0
和ib_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刷数据到磁盘
附录:参考资料
- scrollLeft等属性介绍
- ASP.NET MVC 开源项目Kigg解读(2)——Kigg.Core第一部分
- JavaScript 实现接口 (Interfaces In JavaScript)
- JavaScript 中的单例模式 (singleton in Javascript)
- asp.net MVC 权限设计
- Mediawiki 生成google sitemap
- Meidawiki 配置
- 利用JavaScript获取浏览器计算后的样式
- 机器学习算法-决策树C4.5练习
- cssText的基本使用
- jQuery Mobile 教程 (1)
- 机器学习--Apriori算法
- mvc 权限控制续——使用存储过程判断
- 使用Mongodb 做对象缓存
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 解决android.support.v4.content.FileProvide找不到的问题
- 为Android系统添加config.xml 新配置的设置
- 浅析Android录屏 MediaRecorder
- 实用的网站开发工具导航源码,可以提高工作效率
- Github服务端和客户端完成本地代码上传至Github教程
- 一软在手截图无忧:ShareX截图神器-短小精悍功能完备 自动化任务可截动图截视频
- 使用SurfaceView实现视频弹幕
- 01 CentOS 7.6 切换系统语言
- Android双重SurfaceView实现弹幕效果
- SurfaceView播放视频发送弹幕并实现滚动歌词
- RecyclerView实现流式标签单选多选功能
- Android中AlertDialog四种对话框的最科学编写用法(实例代码)
- Android判断手机是否联网及自动跳转功能(收藏版)
- 使用Flutter实现一个走马灯布局的示例代码
- Android按钮美化样式的实现代码