Mysql跨数据库事务
跨庫(kù)事務(wù)問(wèn)題
在一個(gè)mysql實(shí)例中,現(xiàn)有A庫(kù)和B庫(kù),在一個(gè)事務(wù)里同時(shí)向兩庫(kù)各表插入一條數(shù)據(jù),這時(shí)就涉及一個(gè)事務(wù)跨不同庫(kù)的問(wèn)題
1、首先要確保mysql開(kāi)啟XA事務(wù)支持
SHOW VARIABLES LIKE ‘%XA%’
2.如果innodb_support_xa的值是ON就說(shuō)明mysql已經(jīng)開(kāi)啟對(duì)XA事務(wù)的支持了。
如果不是就執(zhí)行:
SET innodb_support_xa = ON
XA的性能很低。一個(gè)數(shù)據(jù)庫(kù)的事務(wù)和多個(gè)數(shù)據(jù)庫(kù)間的XA事務(wù)性能對(duì)比可發(fā)現(xiàn),性能差10倍左右
https://blog.csdn.net/soonfly/article/details/70677138
這里先聲明兩個(gè)概念:
資源管理器(resource manager):用來(lái)管理系統(tǒng)資源,是通向事務(wù)資源的途徑。數(shù)據(jù)庫(kù)就是一種資源管理器。資源管理還應(yīng)該具有管理事務(wù)提交或回滾的能力。
事務(wù)管理器(transaction manager):事務(wù)管理器是分布式事務(wù)的核心管理者。事務(wù)管理器與每個(gè)資源管理器(resource
manager)進(jìn)行通信,協(xié)調(diào)并完成事務(wù)的處理。事務(wù)的各個(gè)分支由唯一命名進(jìn)行標(biāo)識(shí)。
mysql在執(zhí)行分布式事務(wù)(外部XA)的時(shí)候,mysql服務(wù)器相當(dāng)于xa事務(wù)資源管理器,與mysql鏈接的客戶(hù)端相當(dāng)于事務(wù)管理器。
分布式事務(wù)原理:分段式提交
分布式事務(wù)通常采用2PC協(xié)議,全稱(chēng)Two Phase Commitment Protocol。該協(xié)議主要為了解決在分布式數(shù)據(jù)庫(kù)場(chǎng)景下,所有節(jié)點(diǎn)間數(shù)據(jù)一致性的問(wèn)題。分布式事務(wù)通過(guò)2PC協(xié)議將提交分成兩個(gè)階段:
prepare;
commit/rollback
階段一為準(zhǔn)備(prepare)階段。即所有的參與者準(zhǔn)備執(zhí)行事務(wù)并鎖住需要的資源。參與者ready時(shí),向transaction manager報(bào)告已準(zhǔn)備就緒。
階段二為提交階段(commit)。當(dāng)transaction manager確認(rèn)所有參與者都ready后,向所有參與者發(fā)送commit命令。
如下圖所示:
總結(jié)
以上是生活随笔為你收集整理的Mysql跨数据库事务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android开机画面在uboot里吗,
- 下一篇: AOP。。。