两阶段提交是什么
- prepare阶段:此阶段innodb将事务 trx_id洗入redo_log,将事务状态置为prepare状态
- commit阶段:
- 写入bin_log
- 写入redo_log,将事务状态置为commit
两阶段提交解决了什么问题
故障恢复、主从、主备复制时,保持了数据的一致性
- 故障恢复过程
- Innodb进行crash recovery时是根据binlog来进行前滚回滚的,只有记录了binlog才会根据redo log前滚或回滚事务。
- crash recovery的流程其实是:先扫描binlog,提取出xid,然后比较redo中checkpoint之后的xid,如果在binlog存在,那么提交,如果不存在那么回滚。
- 二阶段日志提交其实是依靠一种内部的分布式(XA)机制避免的,因此MySQL的innodb_support_xa必须设置为1(默认为1且5.7.10后已经弃用)。来具体分析下二阶段提交各个阶段crash的恢复情况:
- 如果是在一阶段(prepare阶段&