Mysql資料庫分散式交易XA詳解

來源:互聯網
上載者:User

標籤:本地   pytho   產生   0.00   nsa   引擎   本地事務   重啟   lan   

XA事務簡介

XA 交易的基礎是兩階段交易認可協議。需要有一個事務協調者來保證所有的事務參與者都完成了準備工作(第一階段)。如果協調者收到所有參與者都準備好的訊息,就會通知所有的事務都可以提交了(第二階段)。MySQL 在這個XA事務中扮演的是參與者的角色,而不是協調者(交易管理員)。

mysql 的XA事務分為內部XA和外部XA。 外部XA可以參與到外部的分散式交易中,需要應用程式層介入作為協調者;內部XA事務用於同一執行個體下跨多引擎事務,由Binlog作為協調者,比如在一個儲存引擎提交時,需要將提交資訊寫入二進位日誌,這就是一個分布式內部XA事務,只不過二進位日誌的參與者是MySQL本身。 Mysql 在XA事務中扮演的是一個參與者的角色,而不是協調者。

 

MySQL XA 交易基本文法

XA {START|BEGIN} xid [JOIN|RESUME]     啟動一個XA事務 (xid 必須是一個唯一值; [JOIN|RESUME]  字句不被支援)    

XA END xid [SUSPEND [FOR MIGRATE]]   結束一個XA事務 ( [SUSPEND [FOR MIGRATE]] 字句不被支援)

XA PREPARE xid    準備

XA COMMIT xid [ONE PHASE]    提交XA事務

XA ROLLBACK xid  復原XA事務

XA RECOVER   查看處於PREPARE 階段的所有XA事務

 

事務標識符xid

xid 是一個事務標識符,它由用戶端提供或者有mysql伺服器產生。

xid的格式一般為 xid : gtrid [, bqual [, formatID]] ;gtrid是一個全域事務標識符,bqual是一個分支限定符,formatID是一個數字,用於標識由gtrid和bqual值使用的格式。根據文法的表示,bqual和formatID是自選的。如果沒有給定,預設的bqual值是‘‘。如果沒有給定,預設的fromatID值是1。

 

XA事務狀態進展過程

1. 使用XA START 啟動一個XA事務,並把它置為ACTIVE狀態。

2. 對一個ACTIVE XA事務,發布構成事務的SQL語句,然後發布一個XA END 語句,XA END 把事務置為IDLE狀態。

3. 對一個IDLE XA 交易, 發布一個XA PREPARE語句或者一個XA COMMIT ... ONE PHASE語句: 前者把事務置為PREPARE狀態,此時XA RECOVER 語句的輸出包含事務的xid值(XA RECOVER 語句會列出所有處於PREPARE狀態的XA事務); 後者用於預備和提交事務,不會被XA RECOVER列出,因為事務已經終止。

4. 對一個PREPARE XA 交易,發行就緒一個XA COMMIT語句來提交和終止事務,或者發布一個XA ROLLBACK 來復原並終止事務。

 

簡單的XA事務操作流程

 

[plain] view plain copy  print?
  1. mysql> XA START ‘xatest‘;  
  2. Query OK, 0 rows affected (0.00 sec)  
  3.   
  4. mysql> INSERT INTO test (name,tel) VALUES (‘123‘,‘123‘);  
  5. Query OK, 1 row affected (0.00 sec)  
  6.   
  7. mysql> XA END ‘xatest‘;  
  8. Query OK, 0 rows affected (0.00 sec)  
  9.   
  10. mysql> XA PREPARE ‘xatest‘;  
  11. Query OK, 0 rows affected (0.00 sec)  
  12.   
  13. mysql>   
  14. mysql>   
  15. mysql> XA COMMIT ‘xatest‘;  
  16. Query OK, 0 rows affected (0.00 sec)  

 

 

XA RECOVER 介紹

XA RECOVER 列出所有處於PREPARE狀態的XA事務:

 

[python] view plain copy  print?
  1. mysql> XA RECOVER;  
  2. +----------+--------------+--------------+--------+  
  3. | formatID | gtrid_length | bqual_length | data   |  
  4. +----------+--------------+--------------+--------+  
  5. |        1 |            6 |            0 | xa1000 |  
  6. +----------+--------------+--------------+--------+  
  7. 1 row in set (0.00 sec)  

注釋:

 

1. formatID 是事務xid的formatID部分。

2. gtrid_length 是xid的gtrid部分的長度,以位元組為單位。

3. bqual_length 是xid的bqual部分的長度,以位元組為單位。

4. data 是xid的gtrid部分和bqual部分的串聯。

 

    在用一個用戶端環境下,XA事務和本地(非XA)事務互斥,如果已經發布了XA START來開啟一個事務,則本地事務不會被啟動,知道XA事務被提交或者被復原為止;相反的,如果已經使用START TRANSACTION啟動一個本地事務,則XA語句不能被使用,直到該事務被提交或者復原為止,而且XA事務僅僅被InnoDB儲存引擎支援。

    如果XA事務達到PREPARE狀態時MySQL伺服器宕機,當伺服器重啟後,伺服器會復原任何未完成的XA事務,即使該事務已經達到了PREPARE狀態;如果用戶端串連終止,而伺服器繼續運行,伺服器將復原任何未完成的XA事務,即使該事務已經達到PREPARED狀態。

 

Mysql資料庫分散式交易XA詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.