IT袋

当前位置:主页 > 经验教程 > 建站编程 >

MySQL事务提交和崩溃恢复

MySQL事务提交和崩溃恢复(2)

时间:2023-09-23 22:59:12 来源:IT袋 作者:苏晓敏
导读:MySQL事务提交和崩溃恢复,而到Commit阶段,执行器继续调用binlog_commit接口提交事务,此时会先将事务执行过程中产生的binlog(包括XID)按照binlog的刷盘策略刷入磁盘,再根据不同的

MySQL事务提交和崩溃恢复

  • 而到Commit阶段,执行器继续调用binlog_commit接口提交事务,此时会先将事务执行过程中产生的binlog(包括XID)按照binlog的刷盘策略刷入磁盘,再根据不同的操作类型把undo segment的状态转换成TRX_UNDO_CACHED、TRX_UNDO_TO_FREE或者TRX_UNDO_TO_PURGE(这几个状态是InnoDB的事务结束的标志),表示满足一定条件后可以清理这些undolog,并将对应的redolog刷盘。至此这个事务就算是提交完了,注意事务提交需要三次刷盘(写redolog,写binlog,写commit,InnoDB新版本通过组提交进行了优化)。而脏页并不一定随着事务提交而刷盘,需依赖于buffer pool持久化策略。
  • 对于处于Prepare状态的事务,存储引擎既可以提交,也可以回滚,这取决于目前该事务对应的binlog是否已经写入硬盘。这时就会读取最后一个binlog日志文件,从日志文件中找一下有没有该Prepare事务对应的XID记录,如果有的话,就将该事务提交,否则就回滚好了。
  • 如果没有两阶段提交

    redolog未写入,binlog未写入:此时MySQL异常重启无法恢复数据,认为sql就没执行。

    redolog写入,binlog未写入:此时MySQL异常重启能根据redolog恢复事务提交时的数据,但binlog没有记录,后续使用binlog恢复临时库会出现数据丟失,导致状态不一致。

    binlog写入,redolog未写入:此时MySQL异常重启临时库能根据binlog重放事务提交时的数据,但redolog没有记录,如果主库有一些脏页已经刷盘,本应先回滚再通过binlog重放,但现在无法回滚,会导致状态不一致。

    结论

    所谓两阶段提交,就是指同时将redolog和binlog都写成功,这样既能保证通过binlog恢复临时库时和主库无差异,又能保证通过redolog恢复主库时和临时库无差异。

    上述的关于MySQL事务提交和崩溃恢复的经验小知识,希望看完本文能给您带来一点帮助!

    相关阅读

    • 什么是DNS服务器? 配置和运行DNS服务器详细步骤

      什么是DNS服务器? 配置和运行DNS服务器详细步骤

      今天为大家介绍什么是DNS服务器的IT小经验,接下来一起来看看吧。 DNS(Domain Name System,域名系统)服务器是一个将域名(例如www.example.com)转换为与之对应的IP地址(例如192.0.2.1)的系统。

    • BGP路由优选规则 BGP路由规则有哪些?

      BGP路由优选规则 BGP路由规则有哪些?

      如果想知道BGP路由优选规则的话题,具体内容如下: 在BGP网络设计中,针对BGP路由的各种路径属性的操作都将影响路由的优选,从而对网络的流量产生影响,掌握BGP路由的优选规则十分之重要

    • dns服务器未响应怎么修复 分享dns未响应最简单的修复办法

      dns服务器未响应怎么修复 分享dns未响应最简单的修复办法

      今天为大家介绍dns服务器未响应怎么修复和分享dns未响应最简单的修复办法的教程内容,继续往下看吧! 很多人在浏览网页时,经常会遇到DNS服务器未响应的情况,那么什么是DNS服务器?DNS未

    • 什么是关系型数据库? 关系型数据库有哪些

      什么是关系型数据库? 关系型数据库有哪些

      小编为大家说一说什么是关系型数据库的教程内容,接下来一起来看看吧。 关系型数据库(Relational Database)是一种基于关系模型的数据库。 关系模型是由数学家兼计算机科学家Edgar F. Codd于