日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

MySQL數據庫是如何實現XA規范的

瀏覽:20日期:2023-10-06 18:18:41
MySQL 的一致性日志

如果 MySQL 數據庫斷電了,未提交的事務怎么辦?

答案:依靠日志。

因為在執行一個操作之前,數據庫會首先把這個操作的內容寫入到文件系統日志里,然后再進行操作。當宕機或者斷電的時候,即使操作并沒有執行完,但是日志在操作前就已經寫好了,我們仍然可以根據日志的內容來進行恢復。

MySQL InnoDB 引擎中和一致性相關的有重做日志(redo log)、回滾日志(undo log)和二進制日志(binlog)。

redo log

每當有操作執行前,在數據真正更改前會先把相關操作寫入 redo 日志。這樣當發生斷電等意外導致后續任務無法完成時,待系統恢復后就可以繼續完成這些更改。

undo log

和 redo 日志對應,也叫撤消日志,記錄事務開始前數據的狀態。

當一些更改在執行一半時發生意外而無法完成,就可以根據撤消日志恢復到更改之前的狀態。

舉個例子,事務 T1 更新數據 X,對 X 執行 Update 操作,從 10 更新到 20,對應的 Redo 日志為 <T1, X, 20>,Undo 日志為 <T1, X, 10>。

binlog

是 MySQL sever 層維護的一種二進制日志,MySQL 最重要的日志之一,它記錄了所有的 DDL 和 DML 語句,除了數據查詢語句 select、show 等,還包含語句所執行的消耗時間。

binlog 與 InnoDB 引擎中的 redo/undo log 不同,主要目的是復制和恢復,用來記錄對 MySQL 數據更新或潛在發生更新的 SQL 語句,并以事務日志的形式保存在磁盤中。

binlog 主要應用在 MySQL 的主從復制過程中,MySQL 集群在 Master 端開啟 binlog,Master 把它的二進制日志傳遞給 slaves 節點,再從節點回放來達到 master-slave 數據一致的目的。

你可以連接到 MySQL 服務器,使用下面的命令查看真實的 binlog 數據:

//查看binlog文件的內容show binlog events;//查看指定binlog文件的內容show binlog events in ’MySQL-bin.000001’;//查看正在寫入的binlog文件show master statusG //獲取binlog文件列表show binary logs;XA 規范是如何定義的

XA 是由 X/Open 組織提出的分布式事務規范,XA 規范主要定義了事務協調者(Transaction Manager)和資源管理器(Resource Manager)之間的接口。

MySQL數據庫是如何實現XA規范的

事務協調者(Transaction Manager)

因為 XA 事務是基于兩階段提交協議的,所以需要有一個協調者,來保證所有的事務參與者都完成了準備工作,也就是 2PC 的第一階段。

如果事務協調者收到所有參與者都準備好的消息,就會通知所有的事務都可以提交,也就是 2PC 的第二階段。

之所以需要引入事務協調者,是因為在分布式系統中,兩臺機器理論上無法達到一致的狀態,需要引入一個單點進行協調。

資源管理器(Resource Manager)

負責控制和管理實際資源,比如數據庫或 JMS 隊列。

目前,主流數據庫都提供了對 XA 的支持,在 JMS 規范中,即 Java 消息服務(Java Message Service)中,也基于 XA 定義了對事務的支持。

XA 事務的執行流程

XA 事務是兩階段提交的一種實現方式,根據 2PC 的規范,XA 將一次事務分割成了兩個階段,即 Prepare 和 Commit 階段。

Prepare 階段

TM 向所有 RM 發送 prepare 指令,RM 接受到指令后,執行數據修改和日志記錄等操作,然后返回可以提交或者不提交的消息給 TM。

如果事務協調者 TM 收到所有參與者都準備好的消息,會通知所有的事務提交,然后進入第二階段。

Commit 階段

TM 接受到所有 RM 的 prepare 結果,如果有 RM 返回是不可提交或者超時,那么向所有 RM 發送 Rollback 命令。

如果所有 RM 都返回可以提交,那么向所有 RM 發送 Commit 命令,完成一次事務操作。

MySQL 如何實現 XA 規范

MySQL 中 XA 事務有兩種情況,內部 XA 和外部 XA,其區別是事務發生在 MySQL 服務器單機上,還是發生在多個外部節點間上。

內部 XA

在 MySQL 的 InnoDB 存儲引擎中,開啟 binlog 的情況下,MySQL 會同時維護 binlog 日志與 InnoDB 的 redo log,為了保證這兩個日志的一致性,MySQL 使用了 XA 事務,由于是在 MySQL 單機上工作,所以被稱為內部 XA。

內部 XA 事務由 binlog 作為協調者,在事務提交時,則需要將提交信息寫入二進制日志,也就是說,binlog 的參與者是 MySQL 本身。

外部 XA

外部 XA 就是典型的分布式事務,MySQL 支持 XA START/END/PREPARE/Commit 這些 SQL 語句,通過使用這些命令,可以完成分布式事務。

你也可以查看 MySQL 官方文檔,了解更多的 XA 命令。

MySQL 外部 XA 主要應用在數據庫代理層,實現對 MySQL 數據庫的分布式事務支持,例如開源的數據庫中間層,比如淘寶的 TDDL、阿里巴巴 B2B 的 Cobar 等。

外部 XA 一般是針對跨多 MySQL 實例的分布式事務,需要應用層作為協調者,比如我們在寫業務代碼,在代碼中決定提交還是回滾,并且在崩潰時進行恢復。

binlog 中的 Xid

當事務提交時,在 binlog 依賴的內部 XA 中,額外添加了 Xid 結構,binlog 有多種數據類型:

statement 格式,記錄為基本語句,包含 Commit row 格式,記錄為基于行 mixed 格式,日志記錄使用混合格式

不論是 statement 還是 row 格式,binlog 都會添加一個 XID_EVENT 作為事務的結束,該事件記錄了事務的 ID 也就是 Xid,在 MySQL 進行崩潰恢復時根據 binlog 中提交的情況來決定如何恢復。

binlog 同步過程

下面來看看 binlog 下的事務提交過程,整體過程是先寫 redo log,再寫 binlog,并以 binlog 寫成功為事務提交成功的標志。

MySQL數據庫是如何實現XA規范的

當有事務提交時:

InnoDB 進入 Prepare 階段,并且 write/sync redo log,寫 redo log,將事務的 xid 寫入到 redo 日志中,binlog 不作任何操作 進行 write/sync binlog,寫 binlog 日志,也會把 xid 寫入到 binlog 調用 InnoDB 引擎的 commit 完成事務的提交,將 commit 信息寫入到 redo 日志中

如果是在第一步和第二步失敗,則整個事務回滾

如果是在第三步失敗,則 MySQL 在重啟后會檢查 xid 是否已經提交,若沒有提交,也就是事務需要重新執行,就會在存儲引擎中再執行一次提交操作,保障 redo log 和 binlog 數據的一致性,防止數據丟失。

實際執行還牽扯到操作系統緩存 buffer 何時同步到文件系統中,所以 MySQL 支持用戶自定義在 commit 時如何將 log buffer 中的日志刷到 log file 中,通過變量 innodb_flush_log_at_trx_Commit 的值來決定。

在 log buffer 中的內容稱為臟日志,感興趣的話可以查詢資料了解下。

以上就是MySQL數據庫是如何實現XA規范的的詳細內容,更多關于MySQL數據庫XA規范的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产伦精品一区二区三区在线播放| 一区二区三区国产盗摄| 国产一级成人av| 1024精品久久久久久久久| 18国产精品| 日韩精品1区2区3区| 日本不卡在线视频| 免费成人在线视频观看| 99久久夜色精品国产亚洲狼| 亚洲成人不卡| 国产精品mv在线观看| 日韩三级久久| 日韩中文字幕91| 欧美日本不卡高清| 国产精品nxnn| 精品国产中文字幕第一页| 粉嫩av一区二区三区四区五区 | 高潮久久久久久久久久久久久久| 日韩avvvv在线播放| av不卡在线| 天堂精品久久久久| 国产欧美精品久久| 一区二区三区国产在线| 日本不卡在线视频| 一区在线免费| 欧美亚洲三级| 久久狠狠亚洲综合| 欧美丰满日韩| 老司机久久99久久精品播放免费| 久久一区亚洲| 日本精品不卡| 久久精品理论片| 国产亚洲高清视频| 日韩不卡在线观看日韩不卡视频| 国产精品久久久久久久久久久久久久久| 久久精品国产99国产| 亚洲欧美综合| 亚洲韩日在线| 国产福利资源一区| 久久国产88| 91成人小视频| 国产偷自视频区视频一区二区| 午夜国产一区二区| 国产一区二区精品久| 蜜桃一区二区三区| 国产精品分类| 亚洲精品在线a| 日韩欧美字幕| 欧美1区二区| 91精品丝袜国产高跟在线| 中文字幕系列一区| 久久国产生活片100| 日韩精品中文字幕第1页| 日韩精品1区2区3区| 国产亚洲在线| 国产亚洲久久| 日韩一区二区三区免费视频| 欧美+日本+国产+在线a∨观看| 丝袜a∨在线一区二区三区不卡| 日产精品一区| 久久精品1区| 久久精品99国产国产精| 国产极品一区| 国产亚洲精品自拍| 色在线中文字幕| 日本激情一区| www.com.cn成人| 国产精品一二| 精品国产美女a久久9999| 福利视频一区| 久久先锋影音| 国产v日韩v欧美v| 亚洲精品激情| 亚洲精品乱码| 中文一区一区三区免费在线观| 黑森林国产精品av| 亚洲电影有码| 亚洲精品国产偷自在线观看| 日韩不卡一区| 91欧美极品| 国产精品www.| 成人在线视频免费看| 欧美亚洲综合视频| 久久av网址| 国产成人精品一区二区三区视频| 美女视频黄免费的久久| 国产一区二区三区91| 精品不卡一区| 99视频精品全部免费在线视频| 成人看片网站| 午夜久久99| 美国三级日本三级久久99 | 欧美色图一区| 视频在线在亚洲| 久久不见久久见免费视频7| 国产精品嫩模av在线| 国产一区二区视频在线看| 日韩视频一区二区三区在线播放免费观看| 国产一区91| 国产乱人伦丫前精品视频| 日韩理论视频| 西西人体一区二区| 精品日本视频| 国产一区二区精品| 日韩国产一二三区| 日韩电影免费网站| 日本在线视频一区二区| 色综合视频一区二区三区日韩| 国产精品久久久久久久久久久久久久久 | 日韩1区2区日韩1区2区| 亚洲3区在线| 日韩在线观看不卡| 久久中文在线| 亚洲免费观看高清完整版在线观| 红杏一区二区三区| 青草久久视频| 黄色av日韩| 日韩国产欧美一区二区| 国产免费av一区二区三区| 中文字幕一区二区精品区| 久久国产中文字幕| se01亚洲视频| 夜鲁夜鲁夜鲁视频在线播放| 国产精品蜜月aⅴ在线| 亚洲欧美在线综合| 婷婷成人基地| 97精品在线| 四虎8848精品成人免费网站 | 激情久久一区二区| 精品国产欧美日韩一区二区三区| 国产日韩精品视频一区二区三区| 欧美男人天堂| 天堂а√在线最新版中文在线| 国产一区二区三区探花| 91免费精品国偷自产在线在线| 四虎精品一区二区免费| 少妇精品久久久一区二区三区| 欧美日韩中文一区二区| 国产精品99视频| 国产欧美日韩精品一区二区免费 | 国产日韩电影| 亚洲午夜91| 日韩在线高清| 欧美日韩一区二区三区视频播放| 91精品亚洲| 亚洲最大av| 国产私拍福利精品视频二区| 久久这里只有精品一区二区| 国产精品色在线网站| 国产精品扒开腿做爽爽爽软件| 久久精品三级| 亚洲国产影院| 亚洲精品麻豆| 精品日韩在线| 免费日韩一区二区| 久久精品二区亚洲w码 | 亚洲精品影视| 福利一区和二区| 一区三区视频| 精品国产中文字幕第一页| 亚洲小说欧美另类婷婷| 群体交乱之放荡娇妻一区二区| 蜜桃av一区二区三区电影| 久久中文字幕一区二区| 日韩深夜视频| 日韩av中文字幕一区| 波多视频一区| 亚洲欧洲av| 精品一区不卡| 久久亚洲二区| 日韩中文在线播放| 日本综合精品一区| 久久亚洲在线| 精品亚洲免a| 国产伦理久久久久久妇女| 999精品色在线播放| 美女av在线免费看| 日韩av网站在线观看| 国产精品久久久久久久久妇女| 日韩av有码| 国产精品传媒麻豆hd| 一二三区精品| 在线精品一区| 亚洲在线一区| 免费国产自久久久久三四区久久| av资源新版天堂在线| 亚洲免费毛片| 日韩精品一卡二卡三卡四卡无卡| 久久免费大视频| 久久九九精品| 日韩av片子| 成人福利av| 美女久久99| 久久99久久久精品欧美| 欧美在线日韩| 国产欧美日韩免费观看| 青青草伊人久久| 久久精品97| 国内不卡的一区二区三区中文字幕 | 日本欧美大码aⅴ在线播放|