日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql xa 和普通事务_一文看懂MySQL中基于XA实现的分布式事务

發布時間:2024/9/19 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql xa 和普通事务_一文看懂MySQL中基于XA实现的分布式事务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

前面已經介紹了2PC和3PC方面的內容,那么MySQL數據庫在分布式事務這塊又是怎么規劃呢?


XA事務簡介

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

Mysql 的XA事務分為內部XA和外部XA。 外部XA可以參與到外部的分布式事務中,需要應用層介入作為協調者;內部XA事務用于同一實例下跨多引擎事務,由Binlog作為協調者,比如在一個存儲引擎提交時,需要將提交信息寫入二進制日志,這就是一個分布式內部XA事務,只不過二進制日志的參與者是MySQL本身。

MySQL 從5.0.3開始支持XA分布式事務,且只有InnoDB存儲引擎支持。MySQL Connector/J 從5.0.0版本之后開始直接提供對XA的支持。

需要注意的是, 在DTP模型中,mysql屬于資源管理器(RM)。而一個完整的分布式事務中,一般會存在多個RM,由事務管理器TM來統一進行協調。因此,這里所說的mysql對XA分布式事務的支持,一般指的是單臺mysql實例如何執行自己的事務分支。


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事務操作流程

mysql> XA START 'xatest';mysql> INSERT INTO t VALUES (1,'hwb');mysql> XA END 'xatest';mysql> XA PREPARE 'xatest';mysql> XA COMMIT 'xatest';

XA RECOVER 介紹

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

mysql> XA RECOVER;

字段說明:

  • formatID 是事務xid的formatID部分。
  • gtrid_length 是xid的gtrid部分的長度,以字節為單位。
  • bqual_length 是xid的bqual部分的長度,以字節為單位。
  • data 是xid的gtrid部分和bqual部分的串聯。

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

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


覺得有用的朋友多幫忙轉發哦!后面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的mysql xa 和普通事务_一文看懂MySQL中基于XA实现的分布式事务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。