第一章讲到binlog(归档日志)和redo log(重做日志)配合崩溃恢复的时候,用的是反证法,说明了如果没有两阶段提交,会导致MySQL出现主备数据不一致等问题。在两阶段提交的不同瞬间,MySQL如果发生异常重启,是怎么保证数据完整性的?

MySQL 10、MySQL是怎么保证数据不丢_Mysql

                                                                   图1 两阶段提交示意图

这个图不是一个update语句的执行流程吗,怎么还会调用commit语句?原因是把两个“commit”的概念混淆了:

  • 平常说的commit语句,是指MySQL语法中,用于提交一个事务的命令。一般跟begin/start transaction 配对使用。
  • 而我们图中用到的这个commit步骤,指的是事务提交过程中的一个小步骤,也是最后一步。当这个步骤执行完成后,这个事务就提交完成了。
  • commit语句执行的时候,会包含