网站大量收购独家精品文档,联系QQ:2885784924

从0开始带你成为MySQL实战高手04 借着更新语句在InnoDB存储引擎中的执行流程,聊聊binlog是什么.pdfVIP

从0开始带你成为MySQL实战高手04 借着更新语句在InnoDB存储引擎中的执行流程,聊聊binlog是什么.pdf

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

图文04借着更新语句在InnoDB存储引擎中的执行流程,聊聊binlog是什么?手机观看

1868人次阅读2020-01-1607:00:00

详情评论

借着更新语句在InnoDB存储引擎中的执行流程,聊聊binlog是什么?

如何提问:每篇文章都有评论区,大家可以尽情留言提问,我会逐一答疑

如何加群:购买狸猫技术窝专栏的小伙伴都可以加入狸猫技术交流群,一个非常纯粹的技术交流的地方

具体加群方式,请参见目录菜单下的文档:《MySQL专栏付费用户如何加群》(购买后可见)

1、上一讲思考题解答:redo日志刷盘策略的选择建议

先给大家解释一下上一讲的思考题,我给大家的一个建议,其实对于redo日志的三种刷盘策略,我们通常建议是设置

为1

也就是说,提交事务的时候,redo日志必须是刷入磁盘文件里的。

这样可以严格的保证提交事务之后,数据是绝对不会丢失的,因为有redo日志在磁盘文件里可以恢复你做的所有修

改。

如果要是选择0的话,可能你提交事务之后,mysql宕机,那么此时redo日志没有刷盘,导致内存里的redo日志丢失,

你提交的事务更新的数据就丢失了;

如果要是选择2的话,如果机器宕机,虽然之前提交事务的时候,redo日志进入oscache了,但是还没进入磁盘文

件,此时机器宕机还是会导致oscache里的redo日志丢失。

所以对于数据库这样严格的系统而言,一般建议redo日志刷盘策略设置为1,保证事务提交之后,数据绝对不能丢失。

2、MySQLbinlog到底是什么东西?

接着我们来看看MySQLbinlog到底是个什么东西?

实际上我们之前说的redolog,他是一种偏向物理性质的重做日志,因为他里面记录的是类似这样的东西,“对哪个

数据页中的什么记录,做了个什么修改”。

而且redolog本身是属于InnoDB存储引擎特有的一个东西。

而binlog叫做归档日志,他里面记录的是偏向于逻辑性的日志,类似于“对users表中的id=10的一行数据做了更新操

作,更新以后的值是什么”

binlog不是InnoDB存储引擎特有的日志文件,是属于mysqlserver自己的日志文件。

3、提交事务的时候,同时会写入binlog

所以其实我们上一讲讲到,在我们提交事务的时候,会把redolog日志写入磁盘文件中去。然后其实在提交事务的时

候,我们同时还会把这次更新对应的binlog日志写入到磁盘文件中去,如下图所示。

大家可以在这个图里看到一些变动,就是我把跟InnoDB存储引擎进行交互的组件加入了之前提过的执行器这个组件,

他会负责跟InnoDB进行交互,包括从磁盘里加载数据到BufferPool中进行缓存,包括写入undo日志,包括更新

BufferPool里的数据,以及写入redologbuffer,redolog刷入磁盘,写binlog,等等。

实际上,执行器是非常核心的一个组件,负责跟存储引擎配合完成一个SQL语句在磁盘与内存层面的全部数据更新操

作。

而且我们在上图可以看到,我把一次更新语句的执行,拆分为了两个阶段,上图中的1、2、3、4几个步骤,其实本质

是你执行这个更新语句的时候干的事。

然后上图中的5和6两个步骤,是从你提交事务开始的,属于提交事务的阶段了。

4、binlog日志的刷盘策略分析

对于binlog日志,其实也有不同的刷盘策略,有一个sync_binlog参数可以控制binlog的刷盘策略,他的默认值是0,

此时你把binlog写入磁盘的时候,其实不是直接进入磁盘文件,而是进入oscache内存缓存。

所以跟之前分析的一样,如果此时机器宕机,那么你在oscache里的binlog日志是会丢失的,我们看下图的示意

如果要是把sync_binlog参数设置为1的话,那么此时会强制在提交事务的时候,把binlog直接写入到磁盘文件里去,

那么这样提交事务之后,哪怕机器宕机,磁盘上的binlog是不会丢失的,如下图所示

5、基于binlog和redolog完成事务的提交

当我们把binlog写入磁盘文件之后,接着就会完成最终的事务提交,此时会把本次更新对应的binlog文件名称和这次

您可能关注的文档

文档评论(0)

奎奎 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档