本申請涉及數(shù)據(jù)庫,尤其涉及一種基于mysql數(shù)據(jù)庫的分布式事務處理方法及裝置、可讀存儲介質(zhì)。
背景技術:
1、傳統(tǒng)的mysql分布式數(shù)據(jù)庫集群采用兩階段提交分布式事務的方式,即第一階段為準備階段,第二階段為提交階段,確保分布式事務的原子性,即需要所有參與目標分布式事務的節(jié)點都提交成功,否則需要所有參與節(jié)點都回滾。
2、如果第二階段提交的命令在某個或某些參與節(jié)點上失敗,而其他參與節(jié)點依然會提交成功。而對于提交失敗的參與節(jié)點,恢復后對應的分布式事務與其他參與節(jié)點出現(xiàn)分布式事務部分提交不一致的狀態(tài),導致客戶端無法查看正確的分布式事務提交數(shù)據(jù),影響用戶使用體驗。
技術實現(xiàn)思路
1、本申請實施例的目的是提供一種基于mysql數(shù)據(jù)庫的分布式事務處理方法及裝置、可讀存儲介質(zhì),用以解決mysql分布式數(shù)據(jù)庫集群節(jié)點提交分布式事務出現(xiàn)不一致的問題。
2、為了解決上述技術問題,本說明書是這樣實現(xiàn)的:
3、第一方面,提供了一種基于mysql數(shù)據(jù)庫的分布式事務處理方法,所述mysql數(shù)據(jù)庫的分布式事務采用兩階段提交,所述方法包括:
4、對所述mysql數(shù)據(jù)庫集群中處于提交階段的節(jié)點的提交過程進行監(jiān)測,以確定故障節(jié)點;
5、將所述故障節(jié)點的備數(shù)據(jù)副本替換為所述目標故障節(jié)點的主數(shù)據(jù)副本;
6、從替換后的主數(shù)據(jù)副本中獲取所述故障節(jié)點參與的目標分布式事務對應的日志數(shù)據(jù);
7、通過將所述目標分布式事務對應的日志數(shù)據(jù)與其他節(jié)點的日志數(shù)據(jù)進行節(jié)點互證校驗,得到所述目標分布式事務對應的準備階段的節(jié)點提交狀態(tài)列表;
8、基于所述節(jié)點提交狀態(tài)列表,確定所述故障節(jié)點對所述目標分布式事務是否進行補償提交。
9、可選地,對所述mysql數(shù)據(jù)庫集群中處于提交階段的節(jié)點的提交過程進行監(jiān)測,以確定故障節(jié)點,包括:
10、監(jiān)測所述mysql數(shù)據(jù)庫集群中處于提交階段的各節(jié)點在提交過程中的運行狀態(tài);
11、將存在運行狀態(tài)異常的目標節(jié)點確定為故障節(jié)點。
12、可選地,從替換后的主數(shù)據(jù)副本中獲取所述故障節(jié)點參與目標分布式事務對應的日志數(shù)據(jù),包括:
13、基于所述目標分布式事務的標識,查詢所述替換后的主數(shù)據(jù)副本中所述目標分布式事務在準備階段的提交信息及提交緩存;
14、從所述提交緩存中獲取所述目標分布式事務的第一日志數(shù)據(jù),所述第一日志數(shù)據(jù)中記錄有所述目標分布式事務關聯(lián)的各節(jié)點。
15、可選地,通過將所述目標分布式事務對應的日志數(shù)據(jù)與其他節(jié)點的日志數(shù)據(jù)進行節(jié)點互證校驗,得到所述目標分布式事務對應的準備階段的節(jié)點提交狀態(tài)列表,包括:
16、基于所述第一日志數(shù)據(jù)中記錄的所述目標分布式事務關聯(lián)的各節(jié)點,確定所述故障節(jié)點對應的關聯(lián)節(jié)點;
17、基于所述目標分布式事務的標識,查詢關聯(lián)節(jié)點的主數(shù)據(jù)副本中所述目標分布式事務在準備階段的提交信息;
18、從所述提交信息中獲取所述目標分布式事務的第二日志數(shù)據(jù),所述第二日志數(shù)據(jù)中記錄有對應關聯(lián)節(jié)點的提交狀態(tài);
19、基于各關聯(lián)節(jié)點的第二日志數(shù)據(jù)記錄的提交狀態(tài),得到所述目標分布式事務對應的準備階段的節(jié)點提交狀態(tài)列表。
20、可選地,基于所述節(jié)點提交狀態(tài)列表,確定所述故障節(jié)點對所述目標分布式事務是否進行補償提交,包括:
21、如果基于所述節(jié)點提交狀態(tài)列表確定各關聯(lián)節(jié)點均進入提交狀態(tài),則確定所述故障節(jié)點對所述目標分布式事務進行補償提交,
22、其中,關聯(lián)節(jié)點進入提交狀態(tài)表示目標關聯(lián)節(jié)點處于所述準備階段時同意提交所述目標分布式事務。
23、可選地,確定所述故障節(jié)點對所述目標分布式事務進行補償提交之后,還包括:
24、執(zhí)行所述故障節(jié)點對所述目標分布式事務的補償提交;
25、在所述故障節(jié)點恢復正常的情況下,由恢復正常的所述故障節(jié)點執(zhí)行對應的分布式事務。
26、可選地,所述日志數(shù)據(jù)存儲在對應的節(jié)點上。
27、可選地,所述副數(shù)據(jù)副本與所述主數(shù)據(jù)副本為一致性復制。
28、第二方面,提供了一種基于mysql數(shù)據(jù)庫的分布式事務處理裝置,包括處理器和存儲器,所述存儲器存儲可在所述處理器上運行的程序或指令,所述程序或指令被所述處理器執(zhí)行時實現(xiàn)如第一方面所述的方法的步驟。
29、第三方面,提供了一種可讀存儲介質(zhì),該可讀存儲介質(zhì)上存儲有程序或指令,所述程序或指令被處理器執(zhí)行時實現(xiàn)如第一方面所述的方法的步驟。
30、在本申請實施例中,通過對所述mysql數(shù)據(jù)庫集群中處于提交階段的節(jié)點的提交過程進行監(jiān)測,以確定故障節(jié)點;將所述故障節(jié)點的備數(shù)據(jù)副本替換為所述目標故障節(jié)點的主數(shù)據(jù)副本;從替換后的主數(shù)據(jù)副本中獲取所述故障節(jié)點參與的目標分布式事務對應的日志數(shù)據(jù);通過將所述目標分布式事務對應的日志數(shù)據(jù)與其他節(jié)點的日志數(shù)據(jù)進行節(jié)點互證校驗,得到所述目標分布式事務對應的準備階段的節(jié)點提交狀態(tài)列表;基于所述節(jié)點提交狀態(tài)列表,確定所述故障節(jié)點對所述目標分布式事務是否進行補償提交,由此在分布式事務一旦進入提交階段時,即使存在參與節(jié)點出現(xiàn)故障,也可以確保該分布式事務在所有參與節(jié)點提交成功,分布式事務提交一致,不會出現(xiàn)對用戶可見部分非故障節(jié)點提交的數(shù)據(jù),節(jié)點故障對客戶端無感知,用戶可以查看正確的分布式事務提交數(shù)據(jù),提高用戶使用體驗。并且通過日志數(shù)據(jù)的方式處理分布式事務,對原有業(yè)務性能影響極小,不引入額外的復雜度與性能消耗。
1.一種基于mysql數(shù)據(jù)庫的分布式事務處理方法,其特征在于,所述mysql數(shù)據(jù)庫的分布式事務采用兩階段提交,所述方法包括:
2.如權利要求1所述的方法,其特征在于,對所述mysql數(shù)據(jù)庫集群中處于提交階段的節(jié)點的提交過程進行監(jiān)測,以確定故障節(jié)點,包括:
3.如權利要求1所述的方法,其特征在于,從替換后的主數(shù)據(jù)副本中獲取所述故障節(jié)點參與目標分布式事務對應的日志數(shù)據(jù),包括:
4.如權利要求3所述的方法,其特征在于,通過將所述目標分布式事務對應的日志數(shù)據(jù)與其他節(jié)點的日志數(shù)據(jù)進行節(jié)點互證校驗,得到所述目標分布式事務對應的準備階段的節(jié)點提交狀態(tài)列表,包括:
5.如權利要求4所述的方法,其特征在于,基于所述節(jié)點提交狀態(tài)列表,確定所述故障節(jié)點對所述目標分布式事務是否進行補償提交,包括:
6.如權利要求1所述的方法,其特征在于,確定所述故障節(jié)點對所述目標分布式事務進行補償提交之后,還包括:
7.如權利要求1所述的方法,其特征在于,所述日志數(shù)據(jù)存儲在對應的節(jié)點上。
8.如權利要求1所述的方法,其特征在于,所述副數(shù)據(jù)副本與所述主數(shù)據(jù)副本為一致性復制。
9.一種基于mysql數(shù)據(jù)庫的分布式事務處理裝置,其特征在于,包括:存儲器和與所述存儲器電連接的處理器,所述存儲器存儲有可在所述處理器運行的程序或指令,所述程序或指令被所述處理器執(zhí)行時實現(xiàn)如權利要求1至8中任一項所述的方法的步驟。
10.一種可讀存儲介質(zhì),其特征在于,所述可讀存儲介質(zhì)上存儲有程序或指令,所述程序或指令被處理器執(zhí)行時實現(xiàn)如權利要求1至8中任一項所述的方法的步驟。