我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql中redolog和binlog的区别

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql中redolog和binlog的区别

想跟大家聊聊关于 mysql 中的两个小的知识点:redo log 和 binlog

redo log :InnoDB 存储引擎层方面的日志,所以如果你使用的存储引擎不是 InnoDB 的话,那就根本谈不上 redo log。

binlog : MySQL Server 层记录的日志,所以不管是用的什么存储引擎,只要是 MySQL 都是会有 binlog 的存在,在做 MySQL 主从复制的时候,利用的就是 binlog。

接下来,我们就详细来看看它们都分别做了啥?

redo log

为什么要有这个 redo log 日志文件呢?

这里,我们可以举个例子,现在我们想对数据库的数据进行修改操作,现在一条 update 语句过来,一般 update 操作都伴随着查询的操作,得先找到这条数据,然后再进行更新操作对吧。

如果数据量比较小还好,很快就能找到并且更新完毕,但是如果数据量比较大,里面有一亿条数据,怎么办?而且更新操作肯定是要写到磁盘上去的,那这中间的 IO 成本呢?

如果我有好几十条 update 语句先后更新呢?这样想的话,你就能想到,就这些操作,成本就高的不行,那能不能降低一下这些成本呢?

这时候,redo log 就起到作用了。 当有一条记录更新的时候, InnoDB 引擎就会先把记录写到 redo log 里面去,同时更新内存,这样就算是更新这条数据成功了。

但是此时,它并没有更新到磁盘上去对吧?别担心, InnoDB 会在恰当的时候,把这条及记录更新到磁盘上去。

这样的思想或者技术,有个专有名词: WAL 技术,也就是 WriteAheadLogging ,核心就是先写日志,再写磁盘。

redo log 不能一直写吧?

redo log 的大小是固定的,前面的内容会被覆盖,一旦写满,就会触发 redo log 到磁盘的同步,以便腾出空间记录后面的修改。

数据库发生宕机或者重启,数据也将不会丢失。

因为有了 redo log ,之前提交的记录都还在,只需要根据 redo log 里面的记录进行相应恢复就可以了。

binlog

binlog 是 MySQL Server 层的记录日志。

redo log 和 binlog 的区别:

  • redo log 是 InnoDB 引擎特有的; binlog 是 MySQL 的 Server 层实现的,所有的引擎都是可以的。

  • redo log 是物理日志,记录的是”在 XXX 页上做了 XXX 修改”;binlog 是逻辑日志,比如” 给 id = 2 这一行的 c 字段加 1”。

  • redo log 是有固定大小的,所以它的空间会用完,如果用完的话,一定要进行一些写入磁盘的操作才可以继续;binlog 是可以追加写入的,也就是 binlog 没有空间的概念,一直写就行了。

binlog 以事件的形式记录了所有的 DDL 和 DML 语句(因为它记录的是操作而不是数据值,属于逻辑日志),可以用来做主从复制和数据恢复

在开启了 binlog 功能的情况下,我们可以把 binlog 导出成 SQL 语句,把所有的操作重放一遍,来实现数据的恢复。

有了这两个日志之后,我们来看一下一条更新语句是怎么执行的(redo 不能一次写入了):

例如一条语句:update user set name='小马' where id=1;

  • 先查询到这条数据,如果有缓存,也会用到缓存。

  • 把 name 改成小马,然后调用引擎的 API 接口,写入这一行数据到内存,同时记录 redo log。这时 redo log 进入 prepare 状态,然后告诉执行器,执行完成了,可以随时提交。

  • 执行器收到通知后记录 binlog,然后调用存储引擎接口,设置 redo log为 commit 状态。

  • 更新完成。

你能发现 redo log 竟然是先 prepare 状态,等 binlog 写完之后,才是 commit 状态,这种方式就叫”两阶段提交”。为什么会有这种方式呢?

redo log 和 binlog 都可以用于表示事务的提交状态,而两阶段提交就是让这两个状态保持逻辑上的一致。

可以假设一下,如果不采用这种方式,而是就先写 redo log ,再写 binlog ,会怎样? 如果在写 binlog 时,发生了异常,更新操作已经到 redo log 中了,但是此时 binlog 并没有进行更新,是不是出现了数据不一致?

先写 binlog 再写 redo log 也是一样的道理。所以,在写时,先让 redo log 处于 prepare 状态,等 binlog 写完之后,再让 redo log 处于 commit 状态,这样就保持了逻辑上的一致。

小结

到此这篇关于mysql中redo log和 binlog的区别的文章就介绍到这了,更多相关mysql中redo log和binlog内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql中redolog和binlog的区别

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

一文搞定MySQL binlog/redolog/undolog区别

目录mysql binlog/redolog/undolog 的区别?bin logbinlog刷盘时机binlog日志格式redo log为什么需要redo logredo lwww.cppcns.comog基本概念redo log记录形
2023-04-19

mysql两个重要的日志redolog和binlog

一.redo log使用原因在 MySQL 里有这个问题,如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高其实就是 MySQL 里经常说到的 WAL 技术,WAL 的全称 是 Write-Ah
mysql两个重要的日志redolog和binlog
2014-05-05

mysql中redo log和binlog的区别有哪些

这篇文章给大家分享的是有关mysql中redo log和binlog的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。想跟大家聊聊关于 mysql 中的两个小的知识点:redo log 和 binlog
2023-06-29

MySQL慢查询中的commit慢和binlog中慢事务的区别

目录一、问题来源二、各自的判定方式三、证明四、总结常见原因总结,特殊情况除外。一、问题来源在分析性能问题的时候慢查询和binlog慢事务是常用的手段。最近在分析一个慢查询的,发现其中包含了大量的commit语句慢,但是在分析binlog
2022-06-15

MySQL中redo log与binlog的区别有哪些

这篇文章主要介绍“MySQL中redo log与binlog的区别有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL中redo log与binlog的区别有哪些”文章能帮助大家解决问题。
2023-06-29

MySQL慢查询中的commit慢和binlog中慢事务有什么区别

这篇文章主要介绍了MySQL慢查询中的commit慢和binlog中慢事务有什么区别的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL慢查询中的commit慢和binlog中慢事务有什么区别文章都会有所收
2023-07-02

Mysql主从GTID与binlog的区别及说明

目录mysql主从GTID与binlog的区别主要区别总结Mysql主从GTID与binlog的区别最近在公司看到之前数据库的同步是同步gtid进行搭建主从的,我也是第一次遇到,下面来一起学习一下他们跟我们常使用的binlog有什么区别吧
Mysql主从GTID与binlog的区别及说明
2024-10-04

mysql中varchar和varchar2的区别

mysql 中 varchar 和 varchar2 的主要区别在于兼容性和范围限制。varchar 是 mysql 固有的数据类型,长度限制为 255 个字符,与其他数据库不兼容。varchar2 是 oracle 引入的数据类型,作为
mysql中varchar和varchar2的区别
2024-04-26

mysql中describe和show的区别

describe 描述表结构(列名、数据类型、约束、索引),仅适用于表对象。而 show 显示有关数据库对象(数据库、表、列、函数、过程等)的元数据,包括表中列的简要列表和数据库服务器的运行时信息。MySQL 中 DESCRIBE 和 SH
mysql中describe和show的区别
2024-04-29

mysql中varchar和nvarchar的区别

varchar 和 nvarchar 的主要区别在于支持的字符集:varchar 仅支持 ascii 或 latin1 字符集,而 nvarchar 支持 unicode 字符集,这意味着 nvarchar 可以存储更多种类的字符,包括中文
mysql中varchar和nvarchar的区别
2024-05-01

编程热搜

目录