美文网首页
MQ和Mysql二阶段提交

MQ和Mysql二阶段提交

作者: LHZ_123 | 来源:发表于2021-05-09 17:27 被阅读0次

MQ事务消息两阶段提交过程

主要的过程为:

1、先向服务端发送半事务消息,发送成功后执行本地事务

2、本地事务执行成功则Commit,执行失败则Rollback

3、如果执行本地事务或反馈给服务端过程中crash,这个时候服务端的消息状态处于unknown

4、服务端通过TransactionCheckListener,回查本地事务的状态

5、如果本地事务执行成功则Commit,失败就Rollback。

参考资料:https://help.aliyun.com/document_detail/29548.html

Mysql两阶段提交过程

以“update set c = c + 1 where id = 2”这条更新语句为例,看一下执行流程

mysql使用了二阶段提交来保证宕机数据可恢复且主备数据一致。

1)先写redolog ,设置为prepare状态

2)写入binlog

3)提交事务,并将redolog设置为commit状态

假如在时刻A发生了crash,由于binlog还没写,redolog也没提交,所以恢复的时候这个数据会回滚。由于binlog没写,也不会传到备库。

Mysql崩溃恢复时的判断规则:

1、redolog里面的事务是完整的,也就是有了commit标识,则直接提交;

2、redolog里面的事务只有完整的prepare,则判断binlog是否存在且完整

a) 如果完整,则提交事务;b) 如果不完整,则回滚事务。

所以假如时刻B发生了crash,对应的是2(a)这种情况。崩溃恢复过程中事务会被提交。

参考资料:https://time.geekbang.org/column/article/73161

相关文章

网友评论

      本文标题:MQ和Mysql二阶段提交

      本文链接:https://www.haomeiwen.com/subject/mhxvdltx.html