MySQL分布式事務(wù)

MySQL/MariaDB對分布式事務(wù)的支持是根據(jù) X/Open CAE document Distributed Transaction Processing: The XA Specification (http://www.opengroup.org/public/pubs/catalog/c193.htm) ,主要包括下面這幾個語句:
xa start 'gtid'; //開始一個全局事務(wù)
xa end 'gtid'; //結(jié)束一個全局事務(wù)
xa prepare 'gtid'; //準備完成一個事務(wù)
xa commit 'gtid'; //提交
xa rollback 'gtid'; //回滾
xa recover; //恢復(fù)

例子:

mysql> xa start 'ax2';
Query OK, 0 rows affected (0.04 秒)

mysql> update user set name = '敖翔' where userid = 11;
Query OK, 1 rows affected (0.03 秒)

mysql> xa end 'ax2';
Query OK, 0 rows affected (0.05 秒)

mysql> xa prepare 'ax2';
Query OK, 0 rows affected (0.04 秒)

mysql> xa recover;
+----------+--------------+--------------+------+
| formatID | gtrid_length | bqual_length | data |
+----------+--------------+--------------+------+
| 1        | 3            | 0            | ax2  |
+----------+--------------+--------------+------+
1 行于數(shù)據(jù)集 (0.08 秒)

mysql> xa rollback 'ax2';
Query OK, 0 rows affected (0.03 秒)

如果XA事務(wù)達到PREPARED狀態(tài)而且MySQL服務(wù)器宕機,當服務(wù)器重啟后,能夠繼續(xù)處理事務(wù)。就像原本應(yīng)當?shù)哪菢?。但是,如果客戶端連接中止而服務(wù)器繼續(xù)運行,服務(wù)器將回滾任何未完成的XA事務(wù),即使該事務(wù)已達到PREPARED狀態(tài)也同樣。它應(yīng)能提交或回滾PREPARED XA事務(wù),但在不更改二進制日志機制的情況下不能這樣。

1、不是prepare狀態(tài)的事務(wù)在重連后將無法恢復(fù)
mysql> xa start 'ax2';
Query OK, 0 rows affected (0.02 sec)

Database changed
mysql> update user set name ="敖翔" where userid=11;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> xa end 'ax2';
Query OK, 0 rows affected (0.03 sec)

mysql> quit;
Bye
mysql> xa recover;
Empty set (0.02 sec)
2、prepare狀態(tài)的事務(wù)在重連后將可恢復(fù)
mysql> xa start 'ax2';
Query OK, 0 rows affected (0.03 sec)

mysql> update user set name ="敖翔" where userid=11;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> xa end 'ax2';
Query OK, 0 rows affected (0.02 sec)

mysql> xa prepare 'ax2';
Query OK, 0 rows affected (0.03 sec)

mysql> quit;
Bye
mysql> xa recover;
+----------+--------------+--------------+------+
| formatID | gtrid_length | bqual_length | data |
+----------+--------------+--------------+------+
|        1 |            3 |            0 | ax2  |
+----------+--------------+--------------+------+
1 row in set (0.03 sec)

后續(xù)將根據(jù)mysql ?xa機制實現(xiàn)dubbo分布式事務(wù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容