MySQL日志剖析_原创精品文档.pdfVIP

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

MySQL⽇志剖析

说起MySQL的⽇志,有三种类型的⽇志对于MySQL来说是⾄关重要的,这三种⽇志分别为:Binlog、UndoLog和RedoLog。由于Binlog和UndoLog有类似的地⽅,所以按

照如下顺序依次介绍MySQL中的三⼤⽇志原理:UndoLog——RedoLog——Binlog。

UndoLog⽇志

顾名思义,UndoLog的字⾯意思就是撤销操作的⽇志,指的是使MySQL中的数据回到某个状态。

在MySQL数据库中,事务开始之前,MySQL会将待修改的记录保存到UndoLog中,如果数据库崩溃或者事务需要回滚时,MySQL可以通过利⽤UndoLog⽇志,将数据库

中的数据回滚到之前的状态。

MySQL新增、修改和删除数据时,在事务开始前,就会将信息写⼊UndoLog中。事务提交时,并不会⽴刻删除UndoLog,InnoDB存储引擎会将事务对应的UndoLog放⼊

待删除列表中,之后会通过后台的purgethread对待删除的列表进⾏删除处理。这⾥,值得注意的是:UndoLog是⼀种逻辑⽇志,记录的是⼀个变化过程。⽐如,MySQL

执⾏⼀个delete操作,UndoLog就会记录⼀个insert操作;MySQL执⾏⼀个insert操作,UndoLog就会记录⼀个delete操作;MySQL执⾏⼀个update操作,UndoLog就会记

录⼀个相反的update操作。

UndoLog以段的⽅式来管理和记录⽇志信息,在InnoDB存储引擎的数据⽂件中,包含了⼀种叫做rollbacksegment的回滚段,其内部包含了1024个undologsenment。

UndoLog对于MySQL实现事务来说,起着⾄关重要的作⽤,它实现了事务的原⼦性和多版本并发控制,也就是我们经常说的MVCC。

实现事务的原⼦性

UndoLog能够实现MySQL事务的原⼦性,在事务的处理过程中,如果MySQL出现了错误或者⽤户⼿动执⾏了事务的回滚操作(执⾏了rollbac操作),MySQL可以利⽤

UndoLog⽇志将数据库中的数据恢复到之前的状态。

实现MVCC机制

UndoLog在MySQL的InnoDB存储引擎中实现了多版本并发控制(MVCC)机制。事务未提交前,UndoLog保存了未提交之前的版本数据,UndoLog中的数据可以作为旧版

本数据的副本或者快照以便其他并发事务进⾏读取操作。

事务A⼿动开启事务后,对goods数据表中id为1的数据进⾏更新操作,⾸先会把更新命中的数据写⼊到UndoBuffer中。在事务A未提交之前,此时,事务B⼿动开启事务,对

goods数据表中的id为1的数据进⾏查询操作,此时的事务B会读取UndoLog中的数据并返回给客户端,这就是MySQL中的MVCC机制。可以在MySQL中通过下⾯的命令来

查看控制UndoLog⽇志的参数。

showvariableslike%innodb_undo%;

RedoLog⽇志

说了MySQL中的UndoLog,我们再来看看MySQL中的RedoLog⽇志。

顾名思义RedoLog的字⾯意思就是重做⽇志,指的是在数据库出现意外情况时能够对重新执⾏某种操作。

在MySQL中,事务中修改的任何数据,都会将最新的数据写⼊RedoLog中进⾏备份。

在MySQL中,随着事务操作的执⾏,就会产⽣RedoLog⽇志,在事务提交时会产⽣RedoLog并将其写⼊RedoBuffer,RedoBuffer也并不是随着事务的提交就会被⽴刻写

⼊到磁盘中,⽽是等事务操作的脏页写⼊到磁盘之后,RedoLog的使命也就完成了,此时,RedoLog⽇志占⽤的空间可以重新利⽤,会被后续产⽣的RedoLog⽇志覆盖。

RedoLog能够实现事务的持久性,防⽌在发⽣故障的时间点,有脏页未写⼊表的ibd⽂件中,在重启MySQL服务的时候,根据RedoLog进⾏重做,从⽽将未提交的事务

进⾏持久化。这个过程可以简化为下图所⽰。

RedoLog⽂件的内容是以顺序循环的⽅式写⼊⽂件的,写满时就会回到第⼀个⽂件,进⾏覆盖写。

WritePos是当前记录的位置,⼀边写⼀边后移,写到最后⼀个⽂件末尾后就回到0号⽂件开头;

CheckPoint是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数据⽂件;

WritePos

文档评论(0)

150****6105 + 关注
实名认证
文档贡献者

硕士毕业生

1亿VIP精品文档

相关文档