您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何修復(fù)MySQL GTID的混合問題”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“如何修復(fù)MySQL GTID的混合問題”吧!
整體服務(wù)是在兩個(gè)機(jī)房對等部署,然后通過級聯(lián)復(fù)制的方式串起來。
實(shí)際切換前,節(jié)點(diǎn)B因?yàn)槭菑膸?,是很容易摘除的,所以整體的部署架構(gòu)僅剩下A,C,D
同時(shí)在切換前,為了保證整個(gè)業(yè)務(wù)訪問域名的可用性,會(huì)臨時(shí)開啟雙主復(fù)制,這個(gè)階段能夠最大程度保證數(shù)據(jù)的完整性。當(dāng)然這里會(huì)有兩種模式,一種是最大保護(hù)模式,最大保護(hù)模式意味著數(shù)據(jù)只能從一個(gè)入口寫入,如果雙寫很可能會(huì)數(shù)據(jù)沖突,第二種是最大可用模式,也就意味著整個(gè)過程數(shù)據(jù)在兩邊始終可以寫入。這個(gè)模式的選用和具體的業(yè)務(wù)特點(diǎn)有關(guān)(讀多寫少,讀多寫多等)。
所以A和C之間的雙主配置就顯得尤其重要,也是整個(gè)平滑切換數(shù)據(jù)完整性的基礎(chǔ)。
目前A,C,D節(jié)點(diǎn)的GTID基本信息如下:
A: show master status
Executed_Gtid_Set: A:1-222717169,B:1-697
C:show slave status
Executed_Gtid_Set: A:1-222716771,B:1-700
D:show slave status
Executed_Gtid_Set: A:1-222716771,B:1-700
這個(gè)數(shù)據(jù)表達(dá)的含義比較深刻,那就是在數(shù)據(jù)鏈中,存在已被摘除的節(jié)點(diǎn)B的GTID信息,而從C,D的GTID相關(guān)信息可以看到,B中是丟失了一個(gè)數(shù)據(jù)事務(wù)的(當(dāng)然這個(gè)過程不是真正的數(shù)據(jù)變化,和操作不規(guī)范有關(guān))
所以在這種情況下如果要配置雙主,需要解決的就是B相關(guān)GTID的差異,一種是直接抹去B的痕跡,這個(gè)過程需要在C,D上面可操作,但是實(shí)際復(fù)制雙主的時(shí)候又會(huì)出問題。
如果把GTID當(dāng)做一種數(shù)據(jù)血緣的角度會(huì)發(fā)現(xiàn),整個(gè)GTID真是一個(gè)很有靈性的設(shè)計(jì)。假設(shè)紅色是A的數(shù)據(jù)血緣,綠色是B的數(shù)據(jù)血緣。
舍棄了B之后,A,C開啟了雙主,整個(gè)數(shù)據(jù)血緣就是如下的狀態(tài)了:
所以整個(gè)復(fù)制拓?fù)渲械娜魏螖?shù)據(jù)變化都能夠有理有據(jù)的追溯,這是GTID設(shè)計(jì)很有價(jià)值的一件事情。
關(guān)于修復(fù)方式,也比較清晰,那就是把C和D的數(shù)據(jù)血緣B的部分做下“回退”,如下:
A: show master status
Executed_Gtid_Set: A:1-222717169,B:1-697
C:show slave status
Executed_Gtid_Set: A:1-222716771,B:1-697
D:show slave status
Executed_Gtid_Set: A:1-222716771,B:1-697
按照這種模式來一次修改C和D,整個(gè)雙向復(fù)制就能夠很快構(gòu)建起來了。
回置GTID的原理可以參考如下的圖,通過gtid_purged可以間接實(shí)現(xiàn)裁剪。
C端修復(fù)的步驟如下:
1)stop slave;
2)show slave status\G
3)reset master;
切記是在Slave端執(zhí)行,這個(gè)階段的目的就是要重新配置GTID的校準(zhǔn)值。這個(gè)時(shí)候mysql.gtid_executed應(yīng)該就是空的了。
4)重置GTID_purged值
SET @@GLOBAL.GTID_PURGED='A:1-222716771,B:1-697';
5)刪除從庫的復(fù)制配置
reset slave all;
6)配置復(fù)制關(guān)系
CHANGE MASTER TO MASTER_USER='dba_repl', MASTER_PASSWORD='xxxx' , MASTER_HOST='xxxxx',MASTER_PORT=xxxx,MASTER_AUTO_POSITION = 1;
7)重啟Slave節(jié)點(diǎn),查看狀態(tài)
start slave; show slave status\G
修復(fù)好之后,這部分打算是寫一個(gè)巡檢GTID和修復(fù)的腳本邏輯,能夠把這部分的管理做得更細(xì)致一些。
感謝各位的閱讀,以上就是“如何修復(fù)MySQL GTID的混合問題”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對如何修復(fù)MySQL GTID的混合問題這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。