Mysql中的redo log
Mysql中的redo log
1、什么是redo log
redo log叫做重做日志,是保证事务持久性的重要机制。当mysql服务器意外崩溃或者宕机后,保证已经提交的事务,确定持久化到磁盘中的一种措施。
2、为什么需要redo log
innodb是以页为单位来管理存储空间的,任何的增删改差操作最终都会操作完整的一个页,会将整个页加载到buffer pool中,然后对需要修改的记录进行修改,修改完毕不会立即刷新到磁盘,因为此时的刷新是一个随机io,而且仅仅修改了一条记录,刷新一个完整的数据页的话过于浪费了。但是如果不立即刷新的话,数据此时还在内存中,如果此时发生系统崩溃最终数据会丢失的,因此权衡利弊,引入了redo log,也就是说,修改完后,不立即刷新,而是记录一条日志,日志内容就是记录哪个页面,多少偏移量,什么数据发生了什么变更。这样即使系统崩溃,再恢复后,也可以根据redo日志进行数据恢复。另外,redo log是循环写入固定的文件,是顺序写入磁盘的。
3、以组的方式写入
在一个事物中,可能会发生多次的数据修改,对应的就是多个数据页多个偏移量位置的字段变更,也就是说会产生多条redo log,而且因为在同一个事物中,这些redo log,也是不可再分的,也就是说,一个组的redo log在持久化的时候,不能部分成功,部分失败,否则的话,就会破坏事务的原子性。另外为了提升性能redo log是按照块组织在一起,然后写入到磁盘中的,类似于数据的页,而且引入了redo log buffer,默认的大小为16MB。buffer中分了很多的block,每个block的大小为512kb,每一个事务产生的所有redo log称为一个group。
4、redo log的刷盘时机
redo log听着挺厉害的,但是刚开始也是在内存中的一个东西,万一,还没有持久化到磁盘就发生了系统崩溃怎么处理。这个便于redo log的刷盘时机有关:通过一个参数控制:innodb_flush_log_at_trx_commit
- 1、commit的时候进行刷盘:这也是最保险的,因为如果这个时候崩溃了代表没有commit成功,因此,也不用恢复什么数据。
- 2、commit的时候,只是刷新近os的内核缓冲区,具体的刷盘时机不确定。
- 0、后台线程,每s刷新一次到磁盘中。
为了保证事务的持久性,推荐使用1.
5、一条更新语句的执行步骤
update table set id = 10 where id = 1;
- 连接数据库 …
- 判断id=1的这条记录在不在buffer pool中,在的话之间更新,否则从磁盘中加载到buffer pool中,然后进行更新
- 将这个更新操作记录到redo log中,记录的是一个物理日志。此时redo log是一个prepare状态
- 记录该操作的binlog,并且将binlog刷盘
- 提交事务,对redo log进行提交。
7、Mysql的两阶段提交
对于Mysql Innodb存储引擎而言,每次修改后,不仅需要记录Redo log还需要记录Binlog,而且这两个操作必须保证同时成功或者同时失败,否则就会造成数据不一致。为此Mysql引入两阶段提交。
1、如果先写redolog再写binlog
2、先写binlog再写redolog
3、两阶段提交
6、总结
Mysql中的redo log相关推荐
- 说说MySQL中的Redo log Undo log都在干啥
在数据库系统中,既有存放数据的文件,也有存放日志的文件.日志在内存中也是有缓存Log buffer,也有磁盘文件log file,本文主要描述存放日志的文件. MySQL中的日志文件,有这么两类常常讨 ...
- 【图文详解】MySQL事务日志 Redo log(重做) 和 Undo log(撤销)
InnoDB Architecture https://dev.mysql.com/doc/refman/5.6/en/innodb-architecture.html 我们都知道数据库有四大属性AC ...
- mysql innodb log_教你如何理解mysql中的innoDB log
前言:之前一直弄不清楚mysql里面bin log和innodb log文件的区别,在脑子里面一直有个疑问binlog日志文件已经可以用来进行数据库的日志备份恢复了,怎么又多了一个redo log文件 ...
- MySQL——binlog,redo log
一.什么是binlog.redo log binlog属于逻辑日志,是逻辑操作.innodb redo属于物理日志,是物理变更.逻辑日志有个缺点是难以并行,而物理日志可以比较好的并行操作. binlo ...
- MySQL的日志 - redo log
微信搜索『coder-home』,或者扫一扫右侧的二维码,关注『程序猿集锦』. 了解更多干货分享,还有各类视频教程. 扫描它,带走我. 文章目录 前言 什么是redolog reldolog的作用 物 ...
- Mysql 日志系统 redo log 和 binlog
日常笔记
- mysql pdo 获取最后一条sql_一条SQL如何在MYSQL中执行的
mysql主要分为Server层和存储引擎层 Server层:主要包括连接器.查询缓存.分析器.优化器.执行器等:所有跨引擎的功能都包含在这里面,如存储过程.触发器.视图.函数及通用日志模板bingl ...
- 必须了解的MySQL三大日志:binlog、redo log和undo log
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者: 六点半起床 juejin.im/post/68602522 ...
- 精讲 MySQL 事务日志:redo log 和 undo log
来源:https://blog.csdn.net/demonson/article/details/104369733 innodb事务日志包括redo log和undo log.redo log是重 ...
最新文章
- UIDatePicker | 时间选择器
- C/C++连接MySql数据库
- mysql游标嵌入式_Oracle与MySQL内嵌游标的使用示例
- 【转】ABAP的坑1
- 您的屁股发热严重,请降温后使用。
- 帧中继更具体配置信息
- 通过ResNet-50进行面部表情识别(易懂)
- 【Vjudge】P558E A Simple Task(线段树暴力)
- 爬虫实例7 爬取豆瓣电影数据 (json+ajax)
- 拓端tecdat|共享汽车数据分析调研案例报告
- 简单的docker下载安装jenkins
- python catia 接口_使用Python在CATIA中创建新产品
- 微信小程序宠物论坛2
- c语言考试可视化编辑器无法提交,一行代码解决The7升级后可视化编辑器不能正常工作的问题...
- Scrapy——基本用法(命令行工具、Item、Spiders)
- A 'Brief' History of Neural Nets and Deep Learning, Part 4
- 制作你的专属BB8机器人
- SDOI 2018二轮题解(除Day2T1)
- 浅谈云计算技术在企业信息化建设中的应用
- vue中使用xlsx实现excel表的导入和导出
热门文章
- 由皮鞋引起的Java娱乐中文版
- matlab让legend横着排,echarts画一个饼图, orient: 'horizontal',图例横向排列,当图例比较多时,如何在第二排让图标一一对齐?...
- 数据可视化笔记1 数据可视化简介(简史、分类、功能、目标)
- 试题 算法训练 24点 蓝桥杯 Java
- [C语言]输出100以内的所有素数(质数)
- 如何优雅地在Word中粘贴代码
- 深入了解示波器(八):如何选择示波器
- 电商运营裂变新玩法—分销渠道系统模式
- 网站改版怎么做才能保住排名和权重
- 电脑主要硬件解读与选购建议