iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >什么是Redo log和Binlog
  • 368
分享到

什么是Redo log和Binlog

2024-04-02 19:04:59 368人浏览 八月长安
摘要

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

本篇内容介绍了“什么是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”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: 什么是Redo log和Binlog

本文链接: https://www.lsjlt.com/news/61977.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 什么是Redo log和Binlog
    本篇内容介绍了“什么是Redo log和Binlog”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!redo...
    99+
    2022-10-18
  • 什么是Redo log与Binlog
    这篇文章主要介绍“什么是Redo log与Binlog”,在日常操作中,相信很多人在什么是Redo log与Binlog问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是R...
    99+
    2022-10-19
  • MySQL的binlog、redo log和undo log怎么使用
    这篇文章主要介绍“MySQL的binlog、redo log和undo log怎么使用”,在日常操作中,相信很多人在MySQL的binlog、redo log和undo log怎么使用问题上存在疑惑,小编查...
    99+
    2022-10-19
  • MySQL日志之redo log和binlog的区别是什么
    这篇文章主要介绍了MySQL日志之redo log和binlog的区别是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。redo log和...
    99+
    2022-10-18
  • MySQL系列之redo log、undo log和binlog详解
    事务的实现 redo log保证事务的持久性,undo log用来帮助事务回滚及MVCC的功能。 InnoDB存储引擎体系结构 redo log Write Ahead Log策略 事务提交时,先写重做日志再修改...
    99+
    2022-05-26
    mysql redo log undo log和binlog
  • MySQL三大日志(binlog、redo log和undo log)详解
    1.redo log redo log是InnoDB存储引擎层的日志,又称重做日志文件。 用于记录事务操作的变化,记录的是数据修改之后的值,不管事务是否提交都会记录下来 redo log包括两部分:一...
    99+
    2023-09-11
    mysql 数据库
  • Mysql两大日志之binlog和redo log
    本文内容基本摘自于 《MySQL技术内幕》一书,但是在该书中对于这两大日志的内容比较零散,分布于多个章节,本文将与之相关的内容整合起来,方便学习。 目录​​​​​​​ binlog 日志 binlog 参数配置 主从复制 redo l...
    99+
    2023-09-17
    数据库 sql
  • 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_...
    99+
    2023-01-28
    mysql日志binlog MySQL日志类型 MySQL redo log
  • MySQL三大日志(binlog、redo log和undo log)图文详解
    目录1.redo logredo log概述刷盘时机innodb_flush_log_at_trx_commit=0innodb_flush_log_at_trx_commit=1i...
    99+
    2023-01-28
    mysql日志binlog MySQL日志类型 MySQL redo log
  • mysql中redo log和binlog的区别有哪些
    这篇文章给大家分享的是有关mysql中redo log和binlog的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。想跟大家聊聊关于 mysql 中的两个小的知识点:redo log 和 bi...
    99+
    2023-06-29
  • mysql中undo log 及 redo log是什么
    这篇文章将为大家详细讲解有关mysql中undo log 及 redo log是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。00 – Undo LogUndo Lo...
    99+
    2022-10-18
  • MySQL中的redo log和undo log日志有什么用
    这篇文章主要介绍“MySQL中的redo log和undo log日志有什么用”,在日常操作中,相信很多人在MySQL中的redo log和undo log日志有什么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-20
  • mysql中relay log和binlog有什么用
    这篇文章主要为大家展示了“mysql中relay log和binlog有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中relay log和bi...
    99+
    2022-10-18
  • Mysql数据库中的redo log 写入策略和binlog 写入策略
    目录redo log的写入策略binlog的写入策略生产配置性能瓶颈redo log的写入策略 InnoDB提供了innodb_flush_log_at_trx_commit参数,它...
    99+
    2022-11-13
  • MySQL中binlog和relay-log结构的作用是什么
    这篇文章给大家介绍MySQL中binlog和relay-log结构的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。binlog作用binlog的主要作用是记录数据库中表的更改...
    99+
    2022-10-18
  • mysql日志文件undo log和redo log怎么设置
    本篇内容主要讲解“mysql日志文件undo log和redo log怎么设置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql日志文件undo log和re...
    99+
    2023-06-30
  • Oracle redo log文件有什么作用
    这篇文章主要介绍“Oracle redo log文件有什么作用”,在日常操作中,相信很多人在Oracle redo log文件有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle redo l...
    99+
    2023-06-19
  • 什么是MySQL binlog
    这篇文章主要讲解了“什么是MySQL binlog”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是MySQL binlog”吧!1.binlog简介bi...
    99+
    2022-10-18
  • mysql binlog指的是什么
    今天小编给大家分享一下mysql binlog指的是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2023-04-07
    mysql binlog
  • MySQL的binlog日志是什么
    小编给大家分享一下MySQL的binlog日志是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!binlog 基本认识MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的D...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作