1、redo log基本概念

redo log的相关概念这里就不再过多阐述,网上有非常多的好的资料,可以看下缥缈大神的文章:https://www.cnblogs.com/cuisi/p/6525077.html,个人感觉介绍的非常详细。

2、数据更改过程简述

MySQL 在更新数据的时候,都是将数据先从磁盘拉到 buffer pool 中,在buffer pool中修改完成后再写到磁盘中,也就是说MySQL中数据的更改都是要经过buffer pool的。
回到这个更新数据的过程中来看:当数据在buffer pool中更改完成的这一刻,更新后的数据是“最新”的,因为此时磁盘中的数据还是更改前的“旧数据”,而我们都是将磁盘中已经持久化的数据作为“标准数据”,因此此时 buffer pool 中的“最新”数据也常人们被称为“脏数据(dirty data)”。

比如将 update 一百行记录作为一个事务,在这个事务执行过程中会将更新后的数据先写入redo log buffer,redo log buffer 再将数据刷入(请注意刷入这个用语,而非写入,后面会详细介绍)redo log中(这点和 binlog 不同,binlog 是在事务 commit 后一次性写入,而 redo log 在事务执行过程中就会写入)。

3、redo log刷新过程
首先需要明白两个概念:
fsync:传统的unix系统在内核中都设有缓冲区,并且大多数的I/O都会通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的 I/O 操作。这种输出方式被成为延迟写。
unix提供了sync、fsync、fdatasync三个函数,sync只是将所有修改过的块放入写队列,不管它是否写磁盘结束就返回;fsync会等待写磁盘结束才会返回。

O_DIRECT选项:O_DIRECT选项是Linux文件写入中的一个选项,开启了这个选项以后,数据就可以跳过系统层的缓存,直接写入磁盘。

redo log并没有打开O_DIRECT选项,所以redo log buffer只是先刷入redo log file,此时刷入的数据并没有落到磁盘上,而是放在文件系统的缓存中。之后为了确保redo log写入磁盘,就通过fsync操作将数据写入磁盘。(redo log buffer到redo log file只是“刷入”的过程,这个时候并没有写入磁盘,而是写入了OS层的文件系统缓存。)

4、重要参数
innodb_flush_log_at_trx_commit:用来控制redo log刷新到磁盘的策略。

默认值是1,表示每次事务提交的时候都调用fsync来写入到磁盘;
0表示事务在执行过程中,日志一直放在redo log buffer中,但是在事务commit的时候,不写入redo log file,而是通过master线程每秒操作一次,从redo log buffer写入到redo log file中。
2表示事务提交时将redo log buffer刷入redo log file,也即刷入系统文件缓存中,不进行fsync操作,由系统来进行fsync操作。此时如果数据库层宕机,则不会丢失redo log,但是如果服务器宕机,这个时候文件系统中的缓存还没有fsync到磁盘文件中,这个时候就会丢失这一部分数据。

【MySQL】redo log --- 刷入磁盘过程的更多相关文章

  1. MySQL redo log及recover过程浅析

    写在前面:作者水平有限,欢迎不吝赐教,一切以最新源码为准. InnoDB redo log 首先介绍下Innodb redo log是什么,为什么需要记录redo log,以及redo log的作用都 ...

  2. zz MySQL redo log及recover过程浅析

    原作地址:http://www.cnblogs.com/liuhao/p/3714012.html 写在前面:作者水平有限,欢迎不吝赐教,一切以最新源码为准. InnoDB redo log 首先介绍 ...

  3. MySQL redo log 与 binlog 的区别

    MySQL redo log 与 binlog 的区别 什么是redo log 什么是binlog redo log与binlog的区别 1. 什么是redo log? redo log又称重做日志文 ...

  4. mysql redo log

    mysql> show variables like '%innodb_log_file_size%'; +----------------------+-----------+ | Varia ...

  5. 关于MySQL redo log,挖些坑,慢慢填

    1. 为什么可以设置为多个redo log ? (innodb_log_files_in_group,默认值和推荐值都是2,我们线上设的统一为4): 2. 什么条件下会触发刷脏?除了master_th ...

  6. 基于Redo Log和Undo Log的MySQL崩溃恢复流程

    在之前的文章「简单了解InnoDB底层原理」聊了一下MySQL的Buffer Pool.这里再简单提一嘴,Buffer Pool是MySQL内存结构中十分核心的一个组成,你可以先把它想象成一个黑盒子. ...

  7. 2 万字 + 30 张图 | 细聊 MySQL undo log、redo log、binlog 有什么用?

    作者:小林coding 计算机八股文网站:https://xiaolincoding.com/ 大家好,我是小林. 从这篇「执行一条 SQL 查询语句,期间发生了什么?」中,我们知道了一条查询语句经历 ...

  8. 详细分析MySQL事务日志(redo log和undo log)

    innodb事务日志包括redo log和undo log.redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作. undo log不是redo log的逆向过程,其实它 ...

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

    Reference:  https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html 引言 为了最大程度避免数据写入时 IO ...

随机推荐

  1. yield关键字

    1.yield语句有两种形式 (1)yield return <expression>;一次返回一个元素 运行yield return 语句时,会返回一个 值,并记录当前位置及保留该值.下 ...

  2. ping vs telnet, what is the difference between them and when to use which?

    Ping is an ICMP protocol. Basically any system with TCP/IP could respond to ICMP calls if they were ...

  3. docker-compose.yml 示例

    version: ' services: kafka2mongo-: image: hub.windinfo.cn/goldwind/databack: environment: KAFKA_ADDR ...

  4. Linux 部署 xxl-job 注意问题

    问题:Failed to create parent directories for [/data/applogs/xxl-job/xxl-job-admin.log][原因:权限不足] 启动终端: ...

  5. 关于SQL配置管理工具无法打开0x8004100e问题!

    今天犯了个很“2”得问题,因为在远程数据库可以访问,并且也在安装程序中有看到装有SQLserver Mamngement Studio及其它程序,所以想在本地使用数据库应该可以但没想却总是报SQL配置 ...

  6. python练习题-day17

    1.计算n!,例如n=3(计算321=6), 求10! 2.已知一个数列:1.1.2.3.5.8.13.....的规律为从3开始的每一项都等于其前两项的和,这是斐波那契数列.求满足规律的100以内的所 ...

  7. python借助ADB工具实现自动化操作手机

    核心工具——ADB工具 adb工具用于连接Android手机和PC端,我们借助adb工具,就可以通过命令行对手机进行相应的操作 注意:若要通过adb操作手机,需打开手机的开发者模式,并打开USB调试功 ...

  8. ASM检查RAC是否成功

    [grid@asm ~]$ crsctl status resourceNAME=ora.DATA.dgTYPE=ora.diskgroup.typeTARGET=ONLINESTATE=ONLINE ...

  9. 图解:window与BOM的关系

    window与BOM的关系: 1.https://www.jianshu.com/p/f5409202a835

  10. FPC全制造组装的流程介绍(转载)

    [维文信FPC]FPC又称柔性电路板,FPC的PCBA组装焊接流程与硬性电路板的组装有很大的不同,因为FPC板子的硬度不够,较柔软,如果不使用专用载板,就无法完成固定和传输,也就无法完成印刷.贴片.过 ...