关于Mysql两阶段提交的一些思考

45 阅读1分钟

最近回顾了下Mysql的设计,发现在各个系统都广泛使用的两阶段提交都这么解释的 cloud.tencent.com/developer/a…

但是深入思考,就按其所说的

  1. 先写 redolog 后写 binlog 会丢失数据
  2. 先写 binlog 后写 redolog 会多一条数据

以1为基础先写redolog,再写binlog,事务完成。那么每次崩溃恢复的时候,如果两者有一个缺失了,就回滚事务;两者都存在了,就完成事务。不是一样能做到“崩溃恢复后的数据”=“binlog同步的数据”吗?不过有各个大佬为“Innodb必须两阶段提交”说法背书,很多资料中也全都是反证法的思路去证明非两阶段提交不行,但是中间总感觉是有那些细节没有说清楚。

研究下来,个人猜测,是因为事务和redolog是Innodb的特性,所以只要redolog提交了,就算事务完成。所以在这个说法上需要强调一个前提,就是redolog的提交,标志着Innodb事务的结束,那么这个倒是可以说的通。不过暂时没有时间去验证,权且记录留个todo。