MySQL二段提交是一種分布式事務(wù)處理方法,適用于多個(gè)數(shù)據(jù)庫(kù)實(shí)例之間的數(shù)據(jù)操作,保證事務(wù)的原子性、一致性、隔離性和持久性。該方法分為兩個(gè)階段:
1. Prepare 階段
如果事務(wù)操作不出錯(cuò),則所有參與者向協(xié)調(diào)者發(fā)送prepare消息,并開(kāi)始執(zhí)行事務(wù)操作。 如果有任何一個(gè)參與者操作失敗,則所有參與者向協(xié)調(diào)者發(fā)送rollback消息,事務(wù)被回滾。
2. Commit 階段
如果所有參與者在prepare階段都沒(méi)有出錯(cuò),則所有參與者向協(xié)調(diào)者發(fā)送commit消息,協(xié)調(diào)者將所有參與者的commit都收到后,發(fā)出確認(rèn)消息。 接收到確認(rèn)消息后,所有參與者完成事務(wù)提交操作,事務(wù)結(jié)束。 如果在commit階段有任何一個(gè)參與者出錯(cuò),則所有參與者向協(xié)調(diào)者發(fā)送rollback消息,事務(wù)被回滾。
MySQL二段提交可以保證所有參與者的數(shù)據(jù)一致性,但是由于需要等待所有參與者都完成prepare階段,因此會(huì)增加系統(tǒng)的開(kāi)銷(xiāo)和復(fù)雜度。如果只有一個(gè)參與者,或者沒(méi)有并發(fā)操作,則可以不采用二段提交方法。