雙中心建設(shè)期間,xxx機(jī)房內(nèi)部分mysql備庫出現(xiàn)復(fù)制出錯現(xiàn)象,所有出錯信息一致,錯誤信息如下:
|
具體出錯原因:
|
從以上信息看,在對表“t_xxx_xxxxx”進(jìn)行更新操作時,沒找到相應(yīng)的記錄。
目前所有mysql主從采用4并發(fā)、半同步方式進(jìn)行數(shù)據(jù)復(fù)制,以保證主從數(shù)據(jù)復(fù)制的效率與數(shù)據(jù)一致性。由本次具體出錯信息看,當(dāng)時正有4個線程在并發(fā)進(jìn)行數(shù)據(jù)同步:
線程1:操作“5830d371-600d-11e8-bd61-fa163ef6f4ff:240662”事務(wù)
線程2:操作“5830d371-600d-11e8-bd61-fa163ef6f4ff:240659”事務(wù)
線程3:操作“5830d371-600d-11e8-bd61-fa163ef6f4ff:240660”事務(wù)
線程4:操作“5830d371-600d-11e8-bd61-fa163ef6f4ff:240661”事務(wù)
Mysql數(shù)據(jù)復(fù)制是在進(jìn)行“5830d371-600d-11e8-bd61-fa163ef6f4ff:240662”事務(wù)操作時出現(xiàn)了“更新數(shù)據(jù)時,無法找到相應(yīng)記錄”錯誤。
1、分析binlog
分析“5830d371-600d-11e8-bd61-fa163ef6f4ff:240662”事務(wù)所在binlog:
|
該事務(wù)是個更新”t_xxx_xxxxx”的操作,修改記錄”call_swftno=2018052713390100901288006”
其它三個事務(wù)為:
5830d371-600d-11e8-bd61-fa163ef6f4ff:240659
|
該事務(wù)為表“t_xxx_xxxxx”的insertinto on語句,共插入50條記錄,其中包括記錄“call_swftno=2018052713390100901288006”記錄的插入
5830d371-600d-11e8-bd61-fa163ef6f4ff:240660
|
該事務(wù)為表“t_xxx_xxxxx”的insertinto on語句,共插入50條記錄
5830d371-600d-11e8-bd61-fa163ef6f4ff:240661
|
該事務(wù)為表“t_xxx_xxxxxinfo”的更新操作
查看4個事務(wù)在主庫上的提交次序
|
從“l(fā)ast_committed”值可以看出,事務(wù)“240659、240660、240661”并發(fā)運行,并同時提交,事務(wù)“240662”稍后提交。即在主庫上,事務(wù)“240659、240660、240661”同時執(zhí)行,事務(wù)“240662”隨后執(zhí)行。
2、備庫事務(wù)運行
從應(yīng)用邏輯出發(fā),事務(wù)“240659”與“240662”是有執(zhí)行次序的,不能同時執(zhí)行。但基于mysql主從并發(fā)復(fù)制機(jī)制,并從備庫復(fù)制出錯信息看出,事務(wù)“240659、240660、240661、240662”在備庫上是并發(fā)執(zhí)行的,最終導(dǎo)致事務(wù)“240662”在執(zhí)行時,由于事務(wù)“240659”還沒執(zhí)行完而找不到記錄“call_swftno=2018052713390100901288006”的錯誤。
3、備庫記錄查詢
在備庫上查詢“240662”事務(wù)更改所對應(yīng)的記錄,發(fā)現(xiàn)對應(yīng)記錄“call_swftno=2018052713390100901288006”存在,說明了事務(wù)“240659”在事務(wù)“240662”執(zhí)行出錯后,成功執(zhí)行完成。
重啟mysql主從復(fù)制線程,主從復(fù)制恢復(fù)正常,繼續(xù)進(jìn)行數(shù)據(jù)同步。
主庫上短時間內(nèi)有執(zhí)行次序的相關(guān)操作,在從庫上被基于并發(fā)主從復(fù)制的機(jī)制變更成了并發(fā)操作,導(dǎo)致了有依賴操作的事務(wù)出現(xiàn)“找不相關(guān)記錄”錯誤。
所有機(jī)房內(nèi)mysql主從復(fù)制配置都一致,但I(xiàn)DC機(jī)房內(nèi)的數(shù)據(jù)是由前臺業(yè)務(wù)系統(tǒng)產(chǎn)生的,具有一定的時間間隔,沒產(chǎn)生這種現(xiàn)象,而淮安機(jī)房內(nèi)的數(shù)據(jù)是由雙中心同步軟件同步產(chǎn)生的,短時間內(nèi)產(chǎn)生大量有操作依賴的事務(wù),便產(chǎn)生了上述錯誤現(xiàn)象。
Mysql參數(shù)“slave_preserve_commit_order“可以控制Slave上的binlog提交順序和Master上的binlog的提交順序一樣,保證GTID的順序。該參數(shù)只能用于開啟了logicalclock并且啟用了binlog的復(fù)制。即對于多線程復(fù)制,該參數(shù)用來保障事務(wù)在slave上執(zhí)行的順序與relaylog中的順序嚴(yán)格一致。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/130160.html
摘要:哨兵是社區(qū)版本推出的原生高可用解決方案,部署架構(gòu)主要包括兩部分集群和數(shù)據(jù)集群,其中集群是由若干節(jié)點組成的分布式集群。自研推薦推薦自研的高可用解決方案,主要體現(xiàn)在配置中心故障探測和的處理機(jī)制上,通常需要根據(jù)企業(yè)業(yè)務(wù)的實際線上環(huán)境來定制化。 最近很多朋友向我咨詢關(guān)于高可用的方案的優(yōu)缺點以及如何選擇合適的方案線上使用,剛好最近在給宜人貸,光大銀行做企業(yè)內(nèi)訓(xùn)的時候也詳細(xì)講過,這里我再整理發(fā)出來...
摘要:哨兵是社區(qū)版本推出的原生高可用解決方案,部署架構(gòu)主要包括兩部分集群和數(shù)據(jù)集群,其中集群是由若干節(jié)點組成的分布式集群。自研推薦推薦自研的高可用解決方案,主要體現(xiàn)在配置中心故障探測和的處理機(jī)制上,通常需要根據(jù)企業(yè)業(yè)務(wù)的實際線上環(huán)境來定制化。 最近很多朋友向我咨詢關(guān)于高可用的方案的優(yōu)缺點以及如何選擇合適的方案線上使用,剛好最近在給宜人貸,光大銀行做企業(yè)內(nèi)訓(xùn)的時候也詳細(xì)講過,這里我再整理發(fā)出來...
摘要:編輯器編輯器背景編輯器前段時間遇到一個線上問題,后來排查好久發(fā)現(xiàn)是因為主從同步延遲導(dǎo)致的,所以今天寫一篇文章總結(jié)一下這個問題希望對你有用。編輯器幾句嘮叨編輯器大家好,我是小飯,一枚后端工程師。背景前段時間遇到一個線上問題,后來排查好久發(fā)現(xiàn)是因為主從同步延遲導(dǎo)致的,所以今天寫一篇文章總結(jié)一下這個問題希望對你有用。如果覺得還不錯,記得加個關(guān)注點個贊哦思維導(dǎo)圖思維導(dǎo)圖常見的主從架構(gòu)隨著日益增長的訪...
閱讀 1493·2023-01-11 13:20
閱讀 1851·2023-01-11 13:20
閱讀 1290·2023-01-11 13:20
閱讀 2041·2023-01-11 13:20
閱讀 4243·2023-01-11 13:20
閱讀 2948·2023-01-11 13:20
閱讀 1581·2023-01-11 13:20
閱讀 3853·2023-01-11 13:20