redo log

redo log日志也叫重做日志,记录某个数据页修改操作,如:对表空间xx中的数据页xx中的偏移量xxx的地方更新了数据xxx。当系统宕机后用来恢复至最后一次事务提交的时候。

redo log的结构

当我们修改数据页的几个字节的值,redo log就划分了不同的类型,MLOG_1BYTE类型的日志指修改了1个字节的值,MLOG_2BYTE就是修改了2个字节的值,MLOG_4BYTE是修改了4个字节的值,MLOG_8BYTE是修改了8个字节的值,如果修改了大量值,用MLOG_WRITE_STRING表示。

redo log的大致结构如:
日志类型(MLOG_1BYTE),表空间ID,数据页号,数据页中的偏移量,修改了几个字节,具体修改的数据

redo log block

每次我们redo log写入时,是存放在redo log block中的,一个redo log block是512字节,它分为三部分:块头,块体,块尾。

12字节header块头分为四部分:
1:4个字节的block no,块编号。
2:2个字节的data length,写入多少的字节数据。
3:2个字节的first record group。每个事物有多个redo log,为一组,第一个日志分组偏移量。
4:4个字节的checkpoint on。

当我们512个字节的redo log block满时,把它写入磁盘redolog文件中去。执行增删改操作后,先进入redo log block这个结构里,然后再进入磁盘文件。

redo log buffer

redo log到底是如何通过内存缓冲之后,再进入磁盘文件里去的,这就涉及到了一个新的组件,redo log buffer,他就是MySQL专门设计了用来缓冲redo log写入的。

redo log buffer其实就是在MySQL启动的时候就会跟操作系统申请一块连续内存空间,类似于buffer pool,buffer pool是申请之后划分了N多个空的缓存页和一些链表结构,便于从磁盘上的数据页加载到内存中,而redo logbuffer也是类似的,申请出来一批连续的内存,这块内存中划分出来多个redo log block。

通过设置mysql的innodb_log_buffer_size可以指定这个redo log buffer的大小, 默认的值就是16MB。

redo log buffer日志什么时候写入磁盘?

1.当redo log buffer的内容使用了一半时,也就是redo log日志占据了8mb时,就会刷入磁盘。

2.当事务提交时,redo log所在的redo log block都刷入磁盘。

3.后台线程定时刷新,每隔1秒就会把redo log buufer 里的redo log block刷到磁盘文件中。

4.Mysql关闭时,redo log block会刷入磁盘。

redo log日志可能会发生的问题:MySQL不停的产生redo log写入日志文件,那么就用一个日志文件写入全部的redo log?

默认的情况下,redo log都会写入一个目录的文件中,这个目录可以通过show variables like 'datadir’进行查看,可以通过innodb_log_group_home_dir参数来设置这个目录,然后redo log日志文件是有多个的,写满了就会写下一个redo log日志文件,通过innodb_log_file_size可以指定每隔redo log文件的大小,默认是48MB,通过innodb_log_files_in_group可以指定日志文件的数量,默认2个。所以默认的情况下,写满第一个redo log文件,写第二个,第二个写满了,覆盖第一个日志文件中原来的redo log,所以默认情况下,mysql保留了最近96MB的redo log,但是够存储上百万条redo log日志了,参数也可以做调整,具体得看实际的业务需求和数据量。
————————————————

redo log日志相关推荐

  1. oracle的redolog停止,Oracle Redo Log日志故障处理一则

    Oracle Redo Log日志故障处理一则 某日oracle服务器异常重启,当重启oracle数据时,发现redo log文件被损坏, 且这个日志文件是current状态的,导致数据库无法打开; ...

  2. oracle recover redo,oracle redo log日志(当前或非当前日志)损坏之后的db恢复

    出错情况: sql> alter database open; alter database open * 第 1 行出现错误: ora-01113: 文件 1 需要介质恢复 ora-01110 ...

  3. oracle日志重建,在线重建redo log日志组

    -------8月在gx行做的,按照行内标准,实现了将原50M每组共5个redolog日志组重建成100M每组共10组. 1 查看目前的redolog日志组,得知在用的为group4 SQL> ...

  4. mysql dba系统学习(10)innodb引擎的redo log日志的原理

    在InnoDB中,bufferpool里面的dirtypage一方面可以加快数据处理速度,同时也会造成数据的不一致(RAMvsDISK).本文介绍了dirtypage是如何产生,以及InnoDB如何利 ...

  5. mysql dba系统学习(10)innodb引擎的redo log日志的原理 mysql dba系统学习(11)管理innodb引擎的redo log日志的一个问题

    在InnoDB中,bufferpool里面的dirtypage一方面可以加快数据处理速度,同时也会造成数据的不一致(RAMvsDISK).本文介绍了dirtypage是如何产生,以及InnoDB如何利 ...

  6. oracle 删除补全日志组_【REDO】删除REDO LOG重做日志组后需要手工删除对应的日志文件(转)...

    为保证重新创建的日志组成员可以成功创建,我们在删除日志组后需要手工删除对应的日志文件. 1.查看数据库当前REDO LOG日志相关信息 1)查看日志组信息 sys@ora10g> select ...

  7. 【转】【MySQL】运行原理(四):重做日志(redo log),回滚日志(undo log),二进制日志(binlog)

    MySQL中有六种日志文件,分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志(errorlog).慢查询日志(slow query log).一 ...

  8. MySQL日志(undo log 和 redo log 实现事务的原子性/持久性/一致性)

    日志的重要性 日志绝对是数据库的核心.   持久化的日志记录了各种重要的信息. 数据的恢复需要依赖日志.  慢查询sql语句需要用到慢查询日志.以及错误日志中保存着mysqld数据库服务端在启动过程中 ...

  9. mysql 日志重做,mysql 物理日志之redo log(重做日志)原理和介绍

    重做日志用来实现事务的持久性,即事务ACID中的D. InnoDB是事务的存储引擎,其通过 Force Log at Commit机制实现事务的持久性,即当事务提交(COMMIT)时,必须先将该事务的 ...

最新文章

  1. 用Leangoo看板工具做办公室采购流程管理
  2. 手把手构建LSTM的向前传播(Building a LSTM step by step)
  3. Workshop | 超高效的设计方法你GET了吗?Design Sprint设计冲刺工作坊
  4. 红旗Linux可以兼容,红旗 Linux 桌面操作系统11来了:支持国产自主CPU,全新UI风格设计,兼容面广...
  5. 2. PHP赋值运算符
  6. 《机器学习基石》---感知机算法
  7. CI项目设计Redis队列
  8. JAVA 创建学生类
  9. 3_python基础—运算符 2
  10. python双_集成python双版本详解
  11. 利用new Object创建对象
  12. bzoj 2733: [HNOI2012]永无乡(线段树启发式合并)
  13. 关于类微博的timeline的设计思考
  14. 判断可逆素数的c语言程序,C语言可逆素数教程
  15. 远程桌面工具TeamViewer模块之顶部菜单
  16. sql-in查询-元素超过1000条解决方案
  17. 下载Youtube-8m视频,ubuntu安装测试使用
  18. 透明OLED显示器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. PS调色技巧及HSB调色原理
  20. go用smpt包发送邮件, 被抄送收不到邮件bug

热门文章

  1. 通过命令行提示符共享wifi
  2. 小程序一键复制文本内容
  3. 微信小程序点击复制功能
  4. 高中英语教师个人研修计划
  5. Echarts之折线图
  6. 自动化测试框架RF---evaluate的使用
  7. 【限定词习题】any 表“任何”
  8. 互融云工业品电商系统简介
  9. 秒会pygame:小鸟躲柱子的游戏(完整代码和素材)
  10. python中的@property装饰器