许多DBMS使用称为“ XA”的特殊2PC协议进行分布式事务。为什么有人要使用XA?对于我来说,XA不能保证万一发生故障:
在XA中,事务管理器(TM)会告诉所有DBMS在第一阶段中进行准备,如果准备就绪,TM会告诉他们所有在中进行提交第二阶段,否则如果其中任何一个失败,TM会告诉其他人回滚。
如果所有DBMS在第一阶段都已准备好,如果第二阶段有人未提交怎么办?在这种情况下,整个交易将失败,而所有其他交易将不得不回滚(第三阶段?),使第一阶段变得毫无意义。也就是说,即使据说所有DBMS都已准备就绪,第一阶段也不能保证任何(尽管确实增加了成功的可能性)。
答案 0 :(得分:0)
尽管您的问题似乎比理论上的更实际,但
您是对的(来自https://dev.mysql.com/doc/refman/8.0/en/xa-restrictions.html)
如果服务器处于中间位置而意外停止 执行XA PREPARE,XA COMMIT,XA ROLLBACK或XA COMMIT ... ONE PHASE语句,服务器可能无法恢复到正确的状态 状态,使服务器和二进制日志处于不一致状态。
但是-那是关于MySQL的,并用这个标记了这个问题:)
如果您想更深入地研究,我认为您应该跳到https://dba.stackexchange.com/