【MySQL】面试官问的事务二阶段提交,这篇彻底讲明白!

一、什么是二阶段提交?

二阶段提交(2PC)是MySQL保证分布式事务原子性的关键协议
2PC保证了InnoDB引擎层的redo log与Server层的binlog协调一致性。

二、具体流程:

1.Prepare阶段(准备阶段)

  • InnoDB将事务的redo log写入磁盘,写入Prepare标记
  • 执行事务操作(更新内存数据页)
  • 特点: 事务并没有真正提交,只是做好提交准备

2.Commit阶段(提交阶段)

  • binlog写入磁盘
  • redo log中写入Commit标记
  • 特点:此时事务才被视为提交成功

三、必要性分析:

  • 若Prepare阶段崩溃,则用undo log回滚保证原子性
  • 若Commit阶段崩溃,则用binlog +redo log,保证数据一致性

四、为什么需要二阶段提交?

  • 单阶段无法保证binlog是否写入成功
  • 防止出现引擎层提交但binlog丢失导致主从不一致

简要回答:

1.Prepare阶段:InnoDB先写redo log并标记为prepare状态,确保事务操作持久化;
2.Commit阶段Server层写binlog后,InnoDB将redo log标记为commit。

考虑到友友们可能不知道InnoDB和Server层等内容,下篇文章讲解一下MySQL的架构设计

你可能感兴趣的:(数据库,mysql,数据库)