我们常见的一条更新语句,如果你想细究其执行流程的话,必须要先了解 redolog 、binlog,下面我们就来了解一下这俩 CP。

redolog 重做日志

在 MySQL里如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高。为了解决这个问题,MySQL 的设计者就用了 WAL 技术来提升更新效率。

WAL技术,WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志(这个日志就是 redo log),再写磁盘。

这里我们在强调一下:引擎层是存储数据,提供读写接口的。redo log 是引擎层特有的

当一条记录需要更新时,InnoDB 存储引擎会先把记录写到 redo log 里,并更新内存。然后 InnoDB 会找合适的时机,把这个操作更新到磁盘里,这个更新到磁盘的过程一般是在系统比较闲的时候,并不是在更新完内存之后立即更新。

redo log 的好处

  • ① 保证数据的持久性。

    • 数据是记录在磁盘上的,如果事务提交后 MySQL 突然挂了,那么内存里的数据就丢失了,我们数据恢复时候,通过 redo 就可以恢复回来,保证数据的持久性和完整性。
  • ② redo 只是记录了对数据的修改,数据会比一页数据小得多。大大减少了 IO 频率。
    • MySQL 中数据是以页为单位,InnoDB 磁盘上的一页大小是16k,我们查询一条记录,会从硬盘把一页的数据加载出来,加载出来的数据叫数据页,会放入到 Buffer Pool 缓冲池中。后续的查询都是先从 Buffer Pool 中找,没有命中再去硬盘加载,减少硬盘 IO 开销,提升性能。更新表数据的时候,也是如此,发现 Buffer Pool 里存在要更新的数据,就直接在 Buffer Pool 里更新。然后会把在某个数据页上做了什么修改,记录到重做日志缓存(redo log buffer)里,接着刷盘到 redo log 文件里。
    • 而且 redo log 的写也不是一条条写的。因为一条 redo 日志并不是写入的最小单位,一般来说至少都是几条一起写。因为一条修改语句对 B+ 树的修改,绝大多数情况下都不会是只产生一个修改点,比如你要插入一条数据,叶子节点容不下了,那么就可能页分裂,同时还会更新许多内节点的信息。所以这一系列对底层 B+ 树的操作,都会以一组的形式去写入磁盘。
    • redo log 只是记录了对数据的修改,所以数据会比一页数据小得多,就可以大大减少了IO频率。
  • ③ redo 日志的写入是顺序 IO。而修改磁盘的 B+ 树是随机 IO。
    • redo 是往一块硬盘的某个相邻的区域写。如果要直接去修改 B+ 树,很可能这些页并不相邻,寻址会很慢。
    • InnoDB 的 redo log 是固定大小的,比如可以配置为一组 4 个文件,每个文件的大小是 1GB,那么这块 redo log 总共就可以记录 4GB 的操作。从头开始顺序写,写到末尾就又回到开头循环写。

bin log 归档日志

bin log 归档日志,是 Server 层特有的。

是二进制文件,记录了 MySQL 所有数据的增删改操作,并以二进制的形式存储磁盘上。但是对数据库表的查询不会记录在内。

主要用于数据库的主从复制以及数据的增量恢复即数据恢复。

bin log 的三种模式

  • ① ROW 行模式

    • 记录哪条数据修改了,而且记录的比较详细,记录了全部数据,即使是只更新了一个字段,bin log 里也会记录所有字段的数据
    • 优点:不记录 sql 语句的上下文信息,只记录每条数据的详细变更细节,
    • 缺点:bin log 日志非常大,mysql 主从同步时,会产生大量的磁盘 IO。
  • ② Statement 语句模式
    • 每一条修改数据的 sql 都记录在 bin log 中。
    • 优点:不需要记录每一行的变化,减少了 bin log 的日志量,节约了磁盘 IO ,提高了性能。
    • 缺点:由于记录的只是执行语句,为了这些语句能在 从库 slave 上正确运行,还必须记录每条语句在执行时候的一些相关信息,以保证所有语句能在从库和主库端执行的结果相同。
  • ③ Mixed 混合模式
    • 在 Mixed 模式下,一般的语句修改使用 statment 格式保存 binlog,如一些函数,statement 无法完成主从复制的操作,则采用 row 格式保存 binlog,MySQL 会根据执行的每一条具体的 sql 语句来区分对待记录的日志形式,也就是在 Statement 和 Row 之间选择一种。

区别:

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

redolog 和 bin log相关推荐

  1. Mysql的undo、redo、bin log分析

    目录 关于undo log 关于redolog 关于binlog 一个事务的提交流程 undo log :记录数据被修改之前的样子 redo log:记录数据被修改之后的样子 bin log:记录整个 ...

  2. mysql binlog size_设置max_binlog_size和expire_logs_days参数,设置mysql数据库bin log清除机制...

    自从前段时间数据库服务增加了mysql主从同步功能,发现主服务器的bin log日志一直在增长,短短一段时间有的文件达到几百兆.如果时间长了势必会占用很多服务器资源. 在百度搜索到,mysql-bin ...

  3. mysql bin log 255_解析MYSQL BINLOG 二进制格式(4)--TABLE_MAP_EVENT

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 class:Table_map_log_event event:TABLE_MAP_EVENT event_code:19 本event只用于 row模式 ...

  4. 如何解决 bin log 与 redo log 的一致性问题

    如何解决 bin log 与 redo log 的一致性问题 为什么说 redo log 具有崩溃恢复的能力 MySQL Server 层拥有的 bin log 只能用于归档,不足以实现崩溃恢复(cr ...

  5. bin log,redo log以及undo log详解

    1 bin log 1.1 定义 bin log应该说是Mysql里最核心的日志,是MySQL数据库级别的文件,记录对MySQL数据库各种引擎下执行修改的所有操作(包括DDL和DML语句),不会记录s ...

  6. redo log和bin log以及两阶段提交(笔记)

    1.redo log 如果熟悉MySQL你肯定知道MySQL能过对数据进行恢复(前提是开启bin log日志),当然这要归功于bin log日志.但是你可曾听过redo log呢? 首先redo lo ...

  7. mysql根据bin log恢复_MySQL 通过 binlog 恢复数据

    目的 通过了解 binlog 日志的相关配置,简单掌握通过 binlog 对数据库进行数据恢复操作: mysql 日志文件 任何成熟软件都会有一套成熟的日志系统,当软件出现问题时,这些日志就是查询问题 ...

  8. mysql bin 分析_mysql bin log 分析

    1.mysql现状 mysql> show binary  logs; +------------------+-----------+ | Log_name         | File_si ...

  9. mysql bin log日志

    装mysql,运行一段时间后,在mysql目录下出现一堆类似mysql-bin.000***,从mysql-bin.000001开始一直排列下来,而且占用了大量硬盘空间,高达几十个G. 对于这些超大空 ...

最新文章

  1. 微信JSApi支付~微信支付代理模式的实现(原创)
  2. 正则表达式的深入理解
  3. 在vsphere6.5启用Tesla K80
  4. 在论坛中出现的各种疑难问题:日志收缩问题
  5. Redis主从复制及集群
  6. Win10下Tensorflow(GPU版)安装趟坑实录,成功了。
  7. Python_爬虫_BeautifulSoup网页解析库
  8. [jQuery]回到顶部
  9. 获取服务器时间的软件如何修改时间,小程序云开发获取服务器时间
  10. 通过VMName获取VM IP
  11. Wireshark 检索命令
  12. 如何用公式编辑器编辑直角三角形符号
  13. CVPR 2020 之文本检测识别论文大盘点
  14. 【代码记录】pytorch推理及与onnx推理精度对比
  15. JavaScript函数式编程入门-计算器应用
  16. 10.1寸安卓通用车载导航
  17. ChatGPT会对未来5年的NLP算法从业者带来怎样的冲击?
  18. vs2012 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包。
  19. 【转】计算方法太牛了,留着以后教孩子
  20. 如何使用unity制作萌萌的live2d桌宠

热门文章

  1. 解决! 华为鸿蒙安装Google Play,GMS三件套,设备未获得Play保护机制认证。(越过谷歌play保护机制认证,解除Google play保护机制弹窗)
  2. 两步使用Express快速创建web服务器
  3. 多云转晴:Databend 的天空计算之路
  4. 外贸企业邮箱如何选择?
  5. RYF-Net: 深度融合网络用于单幅图像去雾(Deep Fusion Network for Single ImageHaze Removal-IEEE_TIP-2020)
  6. 三星内存android用法,三星One UI(Android 9)自带清理功能:自动释放内存和存储空间...
  7. 东北师范大学计算机学院官网6,计算机学院
  8. 华为提出PyramidTNT:用金字塔结构改进Transformer!涨点明显!
  9. 从chrome有的插件打包到其他的google浏览器安装使用(离线安装)
  10. Python爬虫+Flask,带你创建个网站!