WAL是什么

  • Write-Ahead Logging,先写日志,再写磁盘
  • 先写日志,等适当的时候再写磁盘,降低磁盘 IO 成本,提高更新效率

什么是 redo log

  • 重做日志,属于引擎层,InnoDB 独有
  • 所以 MySQL 自带引擎 MyISAM 是没有 crash-safe 能力的

redo log 的作用

  • 使 InnoDB 即使数据库发生异常重启,之前提交的记录都不会丢失(crash-safe)
  • 使用了 WAL 技术,当记录需要更新的时候,InnoDB 引擎会先把记录写到 redo log 里面,并更新内存,此时算是更新完了。InnoDB 引擎会在适当的时候,将操作记录更新到磁盘

redo log 的结构

  • 在 /etc/my.cnf 中配置: innodb_log_file_size = 256M innodb_log_files_in_group = 4
  • 大小固定,循环写入,满了擦除
  • write pos 是当前记录的位置,一边写一边后移,写到第 3 号文件末尾后就回到 0 号文件开头。
  • check point 是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数据文件。
  • write pos 和 checkpoint 之间是未写入的空间,可以用来记录新的操作。
  • 如果 write pos 追上 checkpoint,空间写满了,停止更新操作,擦掉一些记录,把 checkpoint 推进一下。

什么是 binlog?

  • 归档日志,属于 server 层,任何引擎都能使用

binlog 和 redo log 的区别

  1. redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。
  2. redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。
  3. redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

binlog 和 redo log 在 update 语句中的流程

浅色框:在 InnoDB 内部执行的
深色框:在执行器中执行

redo log 的写入拆成了两个步骤:prepare 和 commit,这就是"两阶段提交"。

配置建议

  1. innodb_flush_log_at_trx_commit = 1
    这个参数设置成 1 的时候,表示每次事务的 redo log 都直接持久化到磁盘,这样可以保证 MySQL 异常重启之后数据不丢失。
    0 表示每秒将"log buffer"同步到"os buffer"且从"os buffer"刷到磁盘日志文件中。
    1 表示每事务提交都将"log buffer"同步到"os buffer"且从"os buffer"刷到磁盘日志文件中。
    2 表示每事务提交都将"log buffer"同步到"os buffer"但每秒才从"os buffer"刷到磁盘日志文件中。

  2. sync_binlog = 1
    这个参数设置成 1 的时候,表示每次事务的 binlog 都持久化到磁盘,这样可以保证 MySQL 异常重启之后 binlog 不丢失。

binlog redo log undo log相关推荐

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

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

  2. MYSQL专题-MySQL三大日志binlog、redo log和undo log

    日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息.mysql日志主要包括重做日志(redo log).回滚日志(undo log).二进制日志(bin log).错误日志(err ...

  3. undolog 是binlog_mysql日志redo log、undo log、binlog以及作用看这篇就可以啦

    什么是事务日志? 事务要保证ACID的完整性必须依靠事务日志做跟踪,每一个操作在真正写入数据数据库之前,先写入到日志文件中如要删除一行数据会先在日志文件中将此行标记为删除,但是数据库中的数据文件并没有 ...

  4. 原创 MySQL探秘(八):基于Redo Log和Undo Log的MySQL崩溃恢复流程(一致性)

    黑盒下的更新数据流程 当我们查询数据的时候,会先去Buffer Pool中查询.如果Buffer Pool中不存在,存储引擎会先将数据从磁盘加载到Buffer Pool中,然后将数据返回给客户端:同理 ...

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

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

  6. 什么是redo log和undo log

    MySQL日志系统中最重要的日志为 重做日志redo log 和 归档日志bin log ,后者为MySQL Server层的日志,前者为InnoDB存储引擎层的日志. 1 重做日志redo log ...

  7. MySQL日志:binlog、事务日志(redo、undo)

    事务的隔离性是通过锁实现,而事务的原子性.一致性和持久性则是通过日志实现.Mysql的日志可以分为: binlog:server层实现 事务日志:包括redo log.undo log,引擎层(inn ...

  8. 数据库原理 - 序列5 - 事务是如何实现的? - Undo Log解析

    本文节选自作者书籍<软件架构设计:大型网站技术架构与业务架构融合之道>. 作者微信公众号:架构之道与术.公众号底部菜单有书友群可以加入,与作者和其他读者进行深入讨论.也可以在京东.天猫上购 ...

  9. Mysql的undo log详解

    一.简介 redo log是事务持久性的保证,undo log是事务原子性的保证.在事务中更新数据的前置操作其实是要先写入一个undo log. 二.作用 1.用于数据的回滚.比如数据执行时候发生错误 ...

最新文章

  1. Angular 服务
  2. 在Visual Studio 2005里,用ActiveSync来同步模拟器(Windows Mobile 5.0 )
  3. 在sitecopy中设置不支持passive模式的ftp服务器
  4. python 视频人脸替换_Python基于OpenCV实现视频的人脸检测
  5. Java基于JavaMail实现向QQ邮箱发送邮件遇到的问题
  6. 蓝桥杯 ADV-66算法提高 阮小二买彩票
  7. HM67主板开启ACHI
  8. win10录屏_win10录屏打不开怎么办?怎么给win10录制屏幕视频?
  9. 在夕阳再晨的日子里(一)----部员的成长
  10. 正式学习Linux的第一节课
  11. Raspberry Pi树莓派分类和其相似产品介绍
  12. 掌握这6个可视化图表,小白也能轻松玩转数据分析
  13. 【云原生】AI云开发平台——AI Model Foundry介绍(开发者可免费体验AI训练模型)
  14. SSD性能测试工具-AS_SSD Benchmark
  15. Win11正式版具体安装教程
  16. Xilinx-7Series-FPGA高速收发器使用学习—TX发送端介绍
  17. .NET应用程序安全操作概述
  18. Redis缓存高可用集群
  19. AM5728(AM5708)开发实战之修复AM5728不稳定问题
  20. 有奖试读 使用share SDK实现腾讯微博授权登录分享(1.x版本)

热门文章

  1. 从头开始实现一个小型spring框架——手写Spring之集成Tomcat服务器
  2. pytorch中的一维数组,是列向量还是行向量?
  3. 零知识证明(zero knowledge validation)
  4. 生僻字存不到mysql_数据库存储生僻字存在的问题
  5. 线程同步之互斥量(互斥锁)
  6. Win10安装ST-Link驱动
  7. python中日期格式转换,计算单位天数时间差
  8. KDZD606绝缘服试验装置
  9. 一切皆socket!网络编程:三次握手 四次握手 与socket函数的关系
  10. ipv6 socket python网络编程