本發(fā)明涉及數(shù)據(jù)同步的,特別是涉及一種mysql主從集群的數(shù)據(jù)實時同步方法與裝置。
背景技術(shù):
1、當(dāng)源端數(shù)據(jù)庫為mysql主從集群,目標(biāo)數(shù)據(jù)庫為同構(gòu)或異構(gòu)數(shù)據(jù)庫管理系統(tǒng),且使用數(shù)據(jù)實時同步軟件進(jìn)行數(shù)據(jù)實時同步時,為了避免數(shù)據(jù)實時同步服務(wù)的中斷,保障實時同步的連續(xù)性,當(dāng)源端mysql數(shù)據(jù)庫集群的主節(jié)點發(fā)生故障時,若mysql數(shù)據(jù)庫節(jié)點故障或者主同步服務(wù)故障,則需要進(jìn)行故障切換,在mysql數(shù)據(jù)庫集群中的可用數(shù)據(jù)庫節(jié)點上繼續(xù)進(jìn)行數(shù)據(jù)實時同步服務(wù),保障mysql數(shù)據(jù)庫到目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)實時同步的高可用。
2、目前對于mysql數(shù)據(jù)庫主從集群,基于日志分析的數(shù)據(jù)實時同步軟件在進(jìn)行同步故障切換時,常規(guī)方法為利用mysql的全局事務(wù)id,在mysql數(shù)據(jù)庫主從節(jié)點的本地binlog日志文件中進(jìn)行同步事務(wù)定位,獲取發(fā)生故障時的同步斷點,然后基于斷點位置繼續(xù)進(jìn)行數(shù)據(jù)實時同步,保證同步的連續(xù)性和正確性。此方法要求mysql主從集群使用全局事務(wù)id(global?transaction?identifier,簡稱為:gtid)同步模式,不適用于基于位點模式的集群。另一方面,基于gtid的事務(wù)定位,在故障恢復(fù)時需要從binlog文件頭開始讀取,不能直接定位同步斷點。
3、鑒于此,克服該現(xiàn)有技術(shù)所存在的缺陷是本技術(shù)領(lǐng)域亟待解決的問題。
技術(shù)實現(xiàn)思路
1、本發(fā)明要解決的技術(shù)問題在于當(dāng)進(jìn)行數(shù)據(jù)實時同步的主節(jié)點需要和備用節(jié)點切換時,如何在適用于位點模式的集群的前提下直接定位同步斷點。
2、本發(fā)明采用如下技術(shù)方案:
3、第一方面,提供一種mysql主從集群的數(shù)據(jù)實時同步方法,包括:
4、在源端創(chuàng)建輔助表t1,在目標(biāo)端創(chuàng)建主輔助表t2和備輔助表t3;其中,源端每隔預(yù)設(shè)時間對所述輔助表t1進(jìn)行更新操作;
5、對源端側(cè)的主節(jié)點的主日志進(jìn)行解析得到主體事務(wù),將從所述主日志中解析出來的針對于所述輔助表t1的更新操作作為主輔助事務(wù),通過所述主輔助表t2對所述主輔助事務(wù)以及目標(biāo)端所提交的主體事務(wù)進(jìn)行記錄;
6、將從源端側(cè)的備用節(jié)點的備用日志中解析出來的針對于所述輔助表t1中的更新操作作為備輔助事務(wù),通過所述備輔助表t3對所述備輔助事務(wù)進(jìn)行記錄;
7、當(dāng)主節(jié)點停止進(jìn)行主同步服務(wù)時,根據(jù)所述主輔助表t2和所述備輔助表t3對所述備用節(jié)點的事務(wù)進(jìn)度進(jìn)行調(diào)整,使得所述備用節(jié)點的主體事務(wù)的進(jìn)度同所述主節(jié)點停用時的事務(wù)進(jìn)度一致;
8、將所述備用節(jié)點切換為新的主節(jié)點,從調(diào)整后的事務(wù)進(jìn)度開始進(jìn)行事務(wù)同步。
9、優(yōu)選的,所述通過所述主輔助表t2對所述主輔助事務(wù)以及目標(biāo)端所提交的主體事務(wù)進(jìn)行記錄,具體包括:
10、當(dāng)所述目標(biāo)端對主節(jié)點同步過來的所述主體事務(wù)進(jìn)行提交時,將主體事務(wù)的起始位置、事務(wù)長度以及事務(wù)編號記錄至所述主輔助表t2;
11、當(dāng)所述目標(biāo)端執(zhí)行所述主輔助事務(wù)時,將主輔助事務(wù)起始位置、事務(wù)長度和更新時間戳記錄至所述主輔助表t2。
12、優(yōu)選的,所述通過所述備輔助表t3對所述備輔助事務(wù)進(jìn)行記錄,具體包括:
13、將備輔助事務(wù)對應(yīng)的起始位置、事務(wù)長度和更新時間戳記錄至所述主輔助表t3。
14、優(yōu)選的,所述當(dāng)主節(jié)點停止進(jìn)行主同步服務(wù)時,根據(jù)所述主輔助表t2和所述備輔助表t3對所述備用節(jié)點的事務(wù)進(jìn)度進(jìn)行調(diào)整,使得所述備用節(jié)點的主體事務(wù)的進(jìn)度同所述主節(jié)點停用時的事務(wù)進(jìn)度一致,具體包括:
15、當(dāng)主節(jié)點停止進(jìn)行主同步服務(wù)時,根據(jù)所述主輔助表t2獲取最后記錄的主輔助事務(wù)以及最后記錄的主體事務(wù),根據(jù)所述備輔助表t3獲取最后記錄的備輔助事務(wù);
16、獲取所述最后記錄的主輔助事務(wù)的更新時間戳tsa和最后記錄的備輔助事務(wù)的更新時間戳tsb之間的大小關(guān)系,根據(jù)所述大小關(guān)系對所述備用節(jié)點的事務(wù)進(jìn)度進(jìn)行一次調(diào)整;
17、獲取所述最后記錄的主輔助事務(wù)的起始位置和所述最后記錄的主體事務(wù)的起始位置的前后關(guān)系,根據(jù)所述前后關(guān)系對一次調(diào)整后的事務(wù)進(jìn)度進(jìn)行二次調(diào)整。
18、優(yōu)選的,所述根據(jù)所述大小關(guān)系對所述備用節(jié)點的事務(wù)進(jìn)度進(jìn)行一次調(diào)整,具體包括:
19、當(dāng)所述更新時間戳tsa大于所述更新時間戳tsb時,將所述備用節(jié)點的事務(wù)進(jìn)度推進(jìn)至更新時間戳為tsa時所對應(yīng)的備輔助事務(wù)的起始位置;
20、當(dāng)所述更新時間戳tsa小于所述更新時間戳tsb時,將所述備用節(jié)點的事務(wù)進(jìn)度回溯至更新時間戳為tsa時所對應(yīng)的備輔助事務(wù)的起始位置;
21、當(dāng)所述更新時間戳tsa等于所述更新時間戳tsb時,則保持所述備用節(jié)點的事務(wù)進(jìn)度不變。
22、優(yōu)選的,所述根據(jù)所述前后關(guān)系對一次調(diào)整后的事務(wù)進(jìn)度進(jìn)行二次調(diào)整,具體包括:
23、當(dāng)所述最后記錄的主輔助事務(wù)的起始位置比所述最后記錄的主體事務(wù)的起始位置靠后時,則保持所述一次調(diào)整后的事務(wù)進(jìn)度不變;
24、當(dāng)所述最后記錄的主體事務(wù)的起始位置比所述最后記錄的主輔助事務(wù)的起始位置靠前時,在所述一次調(diào)整后的事務(wù)進(jìn)度的基礎(chǔ)上,備用節(jié)點對所述最后記錄的主體事務(wù)進(jìn)行過濾處理,從而將備用節(jié)點的事務(wù)進(jìn)度推進(jìn)至所述最后記錄的主體事務(wù)的下一個主體事務(wù)的起始位置。
25、優(yōu)選的,所述將所述備用節(jié)點切換為新的主節(jié)點,從調(diào)整后的事務(wù)進(jìn)度開始進(jìn)行事務(wù)同步,具體包括:
26、當(dāng)原主節(jié)點發(fā)生故障時,將備用節(jié)點切換為新的主節(jié)點,原主節(jié)點在設(shè)定時間內(nèi)停止使用。
27、優(yōu)選的,所述將所述備用節(jié)點切換為新的主節(jié)點,從調(diào)整后的事務(wù)進(jìn)度開始進(jìn)行事務(wù)同步,具體包括:
28、當(dāng)原節(jié)點和備用節(jié)點相互切換時,備用節(jié)點切換為新的主節(jié)點,并進(jìn)行事務(wù)同步,原主節(jié)點切換為新的備用節(jié)點,對主體事務(wù)進(jìn)行過濾處理,并解析輔助表t1中的更新操作。
29、第二方面,提供一種mysql主從集群的數(shù)據(jù)實時同步裝置,包括至少一個處理器,以及,與所述至少一個處理器通信連接的存儲器;其中,所述存儲器存儲有可被所述至少一個處理器執(zhí)行的指令,所述指令被所述處理器執(zhí)行,用于執(zhí)行所述的mysql主從集群的數(shù)據(jù)實時同步方法。
30、第三方面,本發(fā)明還提供了一種非易失性計算機存儲介質(zhì),所述計算機存儲介質(zhì)存儲有計算機可執(zhí)行指令,該計算機可執(zhí)行指令被一個或多個處理器執(zhí)行,用于完成第一方面所述的方法。
31、第四方面,提供了一種芯片,包括:處理器和接口,用于從存儲器中調(diào)用并運行存儲器中存儲的計算機程序,執(zhí)行如第一方面的方法。
32、第五方面,提供了一種包含指令的計算機程序產(chǎn)品,當(dāng)該指令在計算機或處理器上運行時,使得計算機或處理器執(zhí)行如第一方面的方法。
33、第六方面,提供了一種mysql主從集群的數(shù)據(jù)實時同步系統(tǒng),包括如第二方面的mysql主從集群的數(shù)據(jù)實時同步裝置,并使用如第一方面的mysql主從集群的數(shù)據(jù)實時同步方法。
34、本發(fā)明提供一種mysql主從集群的數(shù)據(jù)實時同步方法與裝置,創(chuàng)建輔助表t1、主輔助表t2和備輔助表t3;源端每隔預(yù)設(shè)時間對輔助表t1進(jìn)行更新操作;對主節(jié)點的主日志進(jìn)行解析得到主體事務(wù),將從主日志中解析出來的針對于輔助表t1的更新操作作為主輔助事務(wù),通過主輔助表t2對主輔助事務(wù)以及目標(biāo)端所提交的主體事務(wù)進(jìn)行記錄;將從備用節(jié)點的備用日志中解析出來的針對于輔助表t1中的更新操作作為備輔助事務(wù),通過備輔助表t3對備輔助事務(wù)進(jìn)行記錄;當(dāng)主節(jié)點停止進(jìn)行主同步服務(wù)時,根據(jù)主輔助表t2和備輔助表t3對備用節(jié)點的事務(wù)進(jìn)度進(jìn)行調(diào)整,使得備用節(jié)點的主體事務(wù)的進(jìn)度同主節(jié)點停用時的事務(wù)進(jìn)度一致,備用節(jié)點以調(diào)整后的事務(wù)進(jìn)度開始將主體事務(wù)同步至目標(biāo)端。其中,由于是單獨創(chuàng)建的輔助表t1,因此mysql主從集群無需局限于使用gtid同步模式,采用位點模式的mysql主從集群同樣適用,另一方面通過輔助表中所記錄的事務(wù)對應(yīng)的文件偏移,可以直接定位同步斷點,無需在binlog日志的起始位置開始讀取。