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相关推荐

  1. 说说MySQL中的Redo log Undo log都在干啥

    在数据库系统中,既有存放数据的文件,也有存放日志的文件.日志在内存中也是有缓存Log buffer,也有磁盘文件log file,本文主要描述存放日志的文件. MySQL中的日志文件,有这么两类常常讨 ...

  2. 【图文详解】MySQL事务日志 Redo log(重做) 和 Undo log(撤销)

    InnoDB Architecture https://dev.mysql.com/doc/refman/5.6/en/innodb-architecture.html 我们都知道数据库有四大属性AC ...

  3. mysql innodb log_教你如何理解mysql中的innoDB log

    前言:之前一直弄不清楚mysql里面bin log和innodb log文件的区别,在脑子里面一直有个疑问binlog日志文件已经可以用来进行数据库的日志备份恢复了,怎么又多了一个redo log文件 ...

  4. MySQL——binlog,redo log

    一.什么是binlog.redo log binlog属于逻辑日志,是逻辑操作.innodb redo属于物理日志,是物理变更.逻辑日志有个缺点是难以并行,而物理日志可以比较好的并行操作. binlo ...

  5. MySQL的日志 - redo log

    微信搜索『coder-home』,或者扫一扫右侧的二维码,关注『程序猿集锦』. 了解更多干货分享,还有各类视频教程. 扫描它,带走我. 文章目录 前言 什么是redolog reldolog的作用 物 ...

  6. Mysql 日志系统 redo log 和 binlog

    日常笔记

  7. mysql pdo 获取最后一条sql_一条SQL如何在MYSQL中执行的

    mysql主要分为Server层和存储引擎层 Server层:主要包括连接器.查询缓存.分析器.优化器.执行器等:所有跨引擎的功能都包含在这里面,如存储过程.触发器.视图.函数及通用日志模板bingl ...

  8. 必须了解的MySQL三大日志:binlog、redo log和undo log

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者: 六点半起床 juejin.im/post/68602522 ...

  9. 精讲 MySQL 事务日志:redo log 和 undo log

    来源:https://blog.csdn.net/demonson/article/details/104369733 innodb事务日志包括redo log和undo log.redo log是重 ...

最新文章

  1. UIDatePicker | 时间选择器
  2. C/C++连接MySql数据库
  3. mysql游标嵌入式_Oracle与MySQL内嵌游标的使用示例
  4. 【转】ABAP的坑1
  5. 您的屁股发热严重,请降温后使用。
  6. 帧中继更具体配置信息
  7. 通过ResNet-50进行面部表情识别(易懂)
  8. 【Vjudge】P558E A Simple Task(线段树暴力)
  9. 爬虫实例7 爬取豆瓣电影数据 (json+ajax)
  10. 拓端tecdat|共享汽车数据分析调研案例报告
  11. 简单的docker下载安装jenkins
  12. python catia 接口_使用Python在CATIA中创建新产品
  13. 微信小程序宠物论坛2
  14. c语言考试可视化编辑器无法提交,一行代码解决The7升级后可视化编辑器不能正常工作的问题...
  15. Scrapy——基本用法(命令行工具、Item、Spiders)
  16. A 'Brief' History of Neural Nets and Deep Learning, Part 4
  17. 制作你的专属BB8机器人
  18. SDOI 2018二轮题解(除Day2T1)
  19. 浅谈云计算技术在企业信息化建设中的应用
  20. vue中使用xlsx实现excel表的导入和导出

热门文章

  1. 由皮鞋引起的Java娱乐中文版
  2. matlab让legend横着排,echarts画一个饼图, orient: 'horizontal',图例横向排列,当图例比较多时,如何在第二排让图标一一对齐?...
  3. 数据可视化笔记1 数据可视化简介(简史、分类、功能、目标)
  4. 试题 算法训练 24点 蓝桥杯 Java
  5. [C语言]输出100以内的所有素数(质数)
  6. 如何优雅地在Word中粘贴代码
  7. 深入了解示波器(八):如何选择示波器
  8. 电商运营裂变新玩法—分销渠道系统模式
  9. 网站改版怎么做才能保住排名和权重
  10. 电脑主要硬件解读与选购建议