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

什么是Redo log和Binlog

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

什么是Redo log和Binlog

本篇内容介绍了“什么是Redo log和Binlog”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

redo log

为什么要有 redo log ?

我们可以这样想,如果没有 redo log 的话, MySQL 是如何进行工作的 查询还好说,毕竟只是查询一下记录而已,并没有对数据进行更改

那如果是增加和更新操作呢?现在一条 update 语句过来,后面是不是一定会有限定条件,就比如现在要更新一条记录,把 A 的银行卡余额更新到 1k  ,那这条语句是不是应该来个限定条件,类似 where userName = 'A',也就是说,一般 update  操作都伴随着查询的操作,得先找到这个人,然后再进行更新操作对吧

如果数据量比较小还好,很快就能找到并且更新完毕

但是如果数据量比较大,里面有一亿条数据,怎么办?而且更新操作肯定是要写到磁盘上去的,那这中间的 IO 成本呢?如果我有好几十条 update  语句先后更新呢?这样想的话,你就能想到,就这些操作,成本就高的不行,那能不能降低一下这些成本呢?

这就是 redo log 的作用

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

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

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

同样,这里面有个问题

redo log 不能一直写吧?如果更新操作一直写入到 redo log 中的话,不限制大小的话,可能服务器上的存储空间都被 redo log  给占满了

所以 InnoDB 的 redo log 是固定大小的,比如我们配置了一组 4 个文件,每个文件大小是 1GB ,那么它的操作可能就会这样:

什么是Redo log和Binlog

能够看到,主要就是 write pos 和 checkpoint , write pos  比较好理解,它就是当前记录的位置,有需要记录的操作就从当前位置向后移,等把 ib_logfile_3 写完之后,就回到 ib_logfile_0  文件开头继续写

checkpoint 是当前要擦除的位置,就是 InnoDB  引擎不是会在恰当的时候,将这些操作进行持久化,更新到磁盘上去,那持久化之后的数据是不是就可以擦除了

write pos 和 checkpoint 之间的部分就是可以用来记录操作的部分,那么如果 write pos 和 checkpoint  相遇了怎么办?相遇了是不是说明这个时候分配的 redo log 大小用完了,那这时候就不能再进行更新操作了,必须停下来处理一下,将 checkpoint  往前推推才行

就是因为有了 redo log ,所以 InnoDB 才可以保证即使数据库发生了异常重启,也没关系,之前提交的记录都还在,只需要根据 redo log  里面的记录进行相应恢复就可以了

所以如果你和 DBA 比较熟的话,可以问问,咱们的 MySQL 是不是可以恢复到半个月内任意一秒的状态,如果对方回答是,别怀疑,他真的不是在吹牛逼

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 没有空间的概念,一直写就行了

理解了它们之间区别之后,我们拿一个更新操作来举例

我现在要给 id = 2 这一行的 c 字段加 1,到 MySQL 层面,它是如何去做的呢?

首先,会先找到这条 id = 2 的数据,然后找到 c 字段进行加 1 操作,这个时候,引擎会将这行数据更新到内存中,同时把这个更新操作记录到 redo  log 里面,这个时候 redo log 处于 prepare 状态,随后执行器生成这个操作的 binlog ,并且把 binlog  写入到磁盘完成之后,执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 从 prepare 状态改成 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  状态,这样就保持了逻辑上的一致

“什么是Redo log和Binlog”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

免责声明:

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

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

什么是Redo log和Binlog

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

下载Word文档

猜你喜欢

MySQL系列之redo log、undo log和binlog详解

事务的实现 redo log保证事务的持久性,undo log用来帮助事务回滚及MVCC的功能。 InnoDB存储引擎体系结构redo log Write Ahead Log策略 事务提交时,先写重做日志再修改页;当由于发生宕机而导致数据丢
2022-05-26

MySQL三大日志(binlog、redo log和undo log)图文详解

日志是MySQL数据库的重要组成部分,记录着数据库运行期间各种状态信息,下面这篇文章主要给大家介绍了关于MySQL三大日志(binlog、redo log和undo log)的相关资料,需要的朋友可以参考下
2023-01-28

MySQL三大日志(binlog、redo log和undo log)图文详解

目录1.redo logredo log概述刷盘时机innodb_flush_log_at_trx_commit=0innodb_flush_log_at_trx_commit=1innodb_flush_log_at_trx_commit
2023-01-28

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

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

MySQL中的redo log和undo log日志有什么用

这篇文章主要介绍“MySQL中的redo log和undo log日志有什么用”,在日常操作中,相信很多人在MySQL中的redo log和undo log日志有什么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
2023-06-20

mysql日志文件undo log和redo log怎么设置

本篇内容主要讲解“mysql日志文件undo log和redo log怎么设置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql日志文件undo log和redo log怎么设置”吧!1
2023-06-30

Oracle redo log文件有什么作用

这篇文章主要介绍“Oracle redo log文件有什么作用”,在日常操作中,相信很多人在Oracle redo log文件有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle redo l
2023-06-19

mysql binlog指的是什么

今天小编给大家分享一下mysql binlog指的是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
2023-04-07

编程热搜

目录