redolog 和 bin log
我们常见的一条更新语句,如果你想细究其执行流程的话,必须要先了解 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 之间选择一种。
区别:
- redo log是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。
- redo log 是物理日志,记录的是在某个数据页上做了什么修改;binlog 是逻辑日志,记录的是这个语句的原始逻辑是功能,比如“给 ID=2 这一行的 c 字段加 1 ”。
- redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。追加写是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。
redolog 和 bin log相关推荐
- Mysql的undo、redo、bin log分析
目录 关于undo log 关于redolog 关于binlog 一个事务的提交流程 undo log :记录数据被修改之前的样子 redo log:记录数据被修改之后的样子 bin log:记录整个 ...
- mysql binlog size_设置max_binlog_size和expire_logs_days参数,设置mysql数据库bin log清除机制...
自从前段时间数据库服务增加了mysql主从同步功能,发现主服务器的bin log日志一直在增长,短短一段时间有的文件达到几百兆.如果时间长了势必会占用很多服务器资源. 在百度搜索到,mysql-bin ...
- mysql bin log 255_解析MYSQL BINLOG 二进制格式(4)--TABLE_MAP_EVENT
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 class:Table_map_log_event event:TABLE_MAP_EVENT event_code:19 本event只用于 row模式 ...
- 如何解决 bin log 与 redo log 的一致性问题
如何解决 bin log 与 redo log 的一致性问题 为什么说 redo log 具有崩溃恢复的能力 MySQL Server 层拥有的 bin log 只能用于归档,不足以实现崩溃恢复(cr ...
- bin log,redo log以及undo log详解
1 bin log 1.1 定义 bin log应该说是Mysql里最核心的日志,是MySQL数据库级别的文件,记录对MySQL数据库各种引擎下执行修改的所有操作(包括DDL和DML语句),不会记录s ...
- redo log和bin log以及两阶段提交(笔记)
1.redo log 如果熟悉MySQL你肯定知道MySQL能过对数据进行恢复(前提是开启bin log日志),当然这要归功于bin log日志.但是你可曾听过redo log呢? 首先redo lo ...
- mysql根据bin log恢复_MySQL 通过 binlog 恢复数据
目的 通过了解 binlog 日志的相关配置,简单掌握通过 binlog 对数据库进行数据恢复操作: mysql 日志文件 任何成熟软件都会有一套成熟的日志系统,当软件出现问题时,这些日志就是查询问题 ...
- mysql bin 分析_mysql bin log 分析
1.mysql现状 mysql> show binary logs; +------------------+-----------+ | Log_name | File_si ...
- mysql bin log日志
装mysql,运行一段时间后,在mysql目录下出现一堆类似mysql-bin.000***,从mysql-bin.000001开始一直排列下来,而且占用了大量硬盘空间,高达几十个G. 对于这些超大空 ...
最新文章
- 微信JSApi支付~微信支付代理模式的实现(原创)
- 正则表达式的深入理解
- 在vsphere6.5启用Tesla K80
- 在论坛中出现的各种疑难问题:日志收缩问题
- Redis主从复制及集群
- Win10下Tensorflow(GPU版)安装趟坑实录,成功了。
- Python_爬虫_BeautifulSoup网页解析库
- [jQuery]回到顶部
- 获取服务器时间的软件如何修改时间,小程序云开发获取服务器时间
- 通过VMName获取VM IP
- Wireshark 检索命令
- 如何用公式编辑器编辑直角三角形符号
- CVPR 2020 之文本检测识别论文大盘点
- 【代码记录】pytorch推理及与onnx推理精度对比
- JavaScript函数式编程入门-计算器应用
- 10.1寸安卓通用车载导航
- ChatGPT会对未来5年的NLP算法从业者带来怎样的冲击?
- vs2012 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包。
- 【转】计算方法太牛了,留着以后教孩子
- 如何使用unity制作萌萌的live2d桌宠
热门文章
- 解决! 华为鸿蒙安装Google Play,GMS三件套,设备未获得Play保护机制认证。(越过谷歌play保护机制认证,解除Google play保护机制弹窗)
- 两步使用Express快速创建web服务器
- 多云转晴:Databend 的天空计算之路
- 外贸企业邮箱如何选择?
- RYF-Net: 深度融合网络用于单幅图像去雾(Deep Fusion Network for Single ImageHaze Removal-IEEE_TIP-2020)
- 三星内存android用法,三星One UI(Android 9)自带清理功能:自动释放内存和存储空间...
- 东北师范大学计算机学院官网6,计算机学院
- 华为提出PyramidTNT:用金字塔结构改进Transformer!涨点明显!
- 从chrome有的插件打包到其他的google浏览器安装使用(离线安装)
- Python爬虫+Flask,带你创建个网站!