MySQL如何實現 XA 規範

2022-03-07 10:00:07 字數 549 閱讀 9611

一、前言  

我們提交乙個事務,裡面有多條sql,mysql是如何管理事務的呢?是如何做到其中一條sql執行失敗,全部回滾的呢?

二、xa事務

xa協議是基於二階段提交的乙個具體實現,也是分為prepare和commit兩個階段。

prepare階段:tm(事務協調者)向所有rm(資源管理者)傳送prepare指令,詢問是否可以執行,rm返回可執行或不可執行。

commit階段:所有rm都返回可執行,則向所有rm傳送commit指令。如果有乙個rm返回不可執行,則向所有rm傳送rollback指令。

三、mysql如何實現 xa 規範

mysql根據單機還是分布式集群分為內部xa和外部xa。

內部xa:也就是單機的情況下,binlog充當tm(事務協調者)的角色。乙個事務過來,寫入redo log日誌和undo log日誌。事務提交時,同時寫入redo log和binlog,保證redo log和binlog一致。如果事務撤銷,則根據undo log進行撤銷。

外部xa:分布式集群的情況下,一般用資料庫**層來充當tm的角色,實現對事務的支援。

解讀XA規範

在談到xa規範之前,必須首先了解分布式事務處理 distributed transaction processing,dtp 的概念。transaction,即事務,又稱之為交易,指乙個程式或程式段,在乙個或多個資源如資料庫或檔案上為完成某 些功能的執行過程的集合。分布式事務處理是指乙個事務可能涉及...

XA事務規範

在談到xa規範之前,必須首先了解分布式事務處理 distributed transaction processing,dtp 的概念。transaction,即事務,又稱之為交易,指乙個程式或程式段,在乙個或多個資源如資料庫或檔案上為完成某些功能的執行過程的集合。分布式事務處理是指乙個事務可能涉及多...

MySQL中的XA事務

1 提到xa事務,我們也必須提到普通事務,普通事務和xa事務,還是有很大差別的.普通事務 在開始事務時,每個事務都會建立乙個事務檔案,當commit時,先把修改過的資料塊,寫到事務檔案中,然後再一次性的寫入資料庫檔案中。這樣在commit時掛出錯時,當伺服器重啟,會重新把事務檔案中修改過的資料塊寫到...