日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

概述

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


XA事務簡介

XA 事務的基礎是兩階段提交協議。需要有一個事務協調者來保證所有的事務參與者都完成了準備工作(第一階段)。如果協調者收到所有參與者都準備好的消息,就會通知所有的事務都可以提交了(第二階段)。Mysql 在這個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的支持。

一文看懂MySQL中基于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';
一文看懂MySQL中基于XA實現的分布式事務

 


XA RECOVER 介紹

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

mysql> XA RECOVER;
一文看懂MySQL中基于XA實現的分布式事務

 

字段說明:

  • 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狀態。

分享到:
標簽:分布式 MySQL
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定