天天看點

【MySQL的分布式事務】

【MySQL的分布式事務】
【MySQL的分布式事務】

784·396

InnoDB存儲引擎提供了對XA事務的支援,并通過XA事務來支援分布式事務的實作。分布式事務指的是允許多個獨立的事務資源(transactional resources)參與到一個全局的事務中。事務資源通常是關系型資料庫系統,但也可以是其他類型的資源。全局事務要求在其中的所有參與的事務要麼都送出,要麼都復原,這對于事務原有的ACID要求又有了提高。另外,在使用分布式事務時,InnoDB存儲引擎的事務隔離級别必須設定為SERIALIZABLE。XA事務允許不同資料庫之間的分布式事務,如一台伺服器是MySQL資料庫的,另一台是Oracle資料庫的,又可能還有一台伺服器是SQL Server資料庫的,隻要參與在全局事務中的每個節點都支援XA事務。分布式事務可能在銀行系統的轉賬中比較常見,如使用者David需要從上海轉10 000元到北京的使用者Mariah的銀行卡中:

#Bank@Shanghai:
UPDATE account SET money=money-10000WHEREuser='David';
#Bank@Beijing
UPDATE account SET money=money+10000WHEREuser='Mariah';      

在這種情況下,一定需要使用分布式事務來保證資料的安全。如果發生的操作不能全部送出或復原,那麼任何一個結點出現問題都會導緻嚴重的結果。要麼是David的賬戶被扣款,但是Mariah沒收到,又或者是David的賬戶沒有扣款,Mariah卻收到錢了。

XA事務由一個或多個資料總管(Resource Managers)、一個事務管理器(TransactionManager)以 及一個應用程式(ApplicationProgram)組成。❑資料總管:提供通路事務資源的方法。通常一個資料庫就是一個資料總管。❑事務管理器:協調參與全局事務中的各個事務。需要和參與全局事務的所有資料總管進行通信。❑應用程式:定義事務的邊界,指定全局事務中的操作。在MySQL資料庫的分布式事務中,資料總管就是MySQL資料庫,事務管理器為連接配接MySQL伺服器的用戶端。