dba+開源工具:自動(dòng)修復(fù)MySQL主從同步復(fù)制的報(bào)錯(cuò)數(shù)據(jù)
pt-slave-repair工具簡(jiǎn)介
MySQL主從復(fù)制作為一種常見的數(shù)據(jù)同步方式,有時(shí)候會(huì)出現(xiàn)同步錯(cuò)誤導(dǎo)致同步中斷的情況。手動(dòng)修復(fù)這些同步錯(cuò)誤通常需要耗費(fèi)不少時(shí)間和精力,并且對(duì)于不熟悉MySQL復(fù)制的人來說比較困難。
pt-slave-repair是對(duì)原有pt-slave-restart工具的補(bǔ)充,它提供自動(dòng)修復(fù)MySQL主從同步復(fù)制的報(bào)錯(cuò)數(shù)據(jù),以及恢復(fù)中斷的sql thread復(fù)制線程。
自動(dòng)修復(fù)主從同步數(shù)據(jù)工具具有以下幾個(gè)優(yōu)勢(shì):
- 提高效率:能夠快速檢測(cè)和修復(fù)主從同步錯(cuò)誤,無需手動(dòng)干預(yù)。這大大節(jié)省了DBA的時(shí)間和精力,使他們能夠更專注于其他重要的任務(wù)。
- 減少人為錯(cuò)誤:手動(dòng)修復(fù)同步錯(cuò)誤可能存在人為錯(cuò)誤的風(fēng)險(xiǎn),例如配置錯(cuò)誤或操作失誤。自動(dòng)修復(fù)工具可以提供一致性和準(zhǔn)確性的修復(fù)策略,減少了人為錯(cuò)誤的可能性。
- 實(shí)時(shí)監(jiān)控和響應(yīng):具有實(shí)時(shí)監(jiān)控功能,可以及時(shí)檢測(cè)同步錯(cuò)誤的發(fā)生,并立即采取相應(yīng)的修復(fù)措施。這有助于及時(shí)恢復(fù)同步并減少數(shù)據(jù)延遲。
- 自動(dòng)化運(yùn)維:可以定期檢查主從同步狀態(tài)并執(zhí)行修復(fù)操作,無需人工干預(yù)。這減少了對(duì)人工操作和監(jiān)控的依賴,提高了系統(tǒng)的可靠性和穩(wěn)定性。
- 快速故障恢復(fù):當(dāng)主從同步錯(cuò)誤發(fā)生時(shí),自動(dòng)修復(fù)工具能夠迅速識(shí)別和修復(fù)問題,從而減少數(shù)據(jù)丟失和業(yè)務(wù)中斷的時(shí)間。這有助于提高系統(tǒng)的可用性和數(shù)據(jù)的一致性。
總的來說,自動(dòng)修復(fù)主從同步數(shù)據(jù)工具能夠提高效率、降低風(fēng)險(xiǎn)、實(shí)時(shí)監(jiān)控和響應(yīng)、自動(dòng)化運(yùn)維以及快速故障恢復(fù),可以極大地提升同步運(yùn)行的穩(wěn)定性和可靠性。
原理
- 當(dāng)檢測(cè)到同步報(bào)錯(cuò)1062(主鍵沖突、重復(fù))和1032(數(shù)據(jù)丟失)時(shí),首先要進(jìn)行binlog環(huán)境檢查,如果binlog_format不等于ROW并且binlog_row_image不等于FULL,則退出主程序。如果錯(cuò)誤號(hào)非1062或1032,則直接退出主程序;
- 獲取show slave status信息,得到binlog、position、gtid信息;
- 連接到主庫上解析binlog,如果是DELETE刪除語句,則直接跳過;
- 關(guān)閉slave_parallel_workers多線程并行復(fù)制;
- 如果開啟GITD復(fù)制模式,啟用SET gtid_next方式;如果開啟位置點(diǎn)復(fù)制模式,啟動(dòng)SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1方式);
- 如果是UPDATE/INSERT語句,則把BINLOG解析為具體的SQL,并且反轉(zhuǎn)SQL,將其轉(zhuǎn)換為REPLACE INTO;
- 將解析后的REPLACE INTO語句反向插入slave上,使其數(shù)據(jù)保持一致,然后執(zhí)行第5步操作;
- 將slave設(shè)置為read_only只讀模式;
- 以此類推,最終使其show slave status同步為雙YES(同步正常)。
使用
shell> chmod 755 pt-slave-repair
1、前臺(tái)運(yùn)行
shell> ./pt-slave-repair -H 192.168.198.239 -P 3346 -u admin -p hechunyang -d test
注:你可以按<ctrl+c>或者<ctrl+z>退出程序。
2、后臺(tái)運(yùn)行
shell> nohup ./pt-slave-repair -H 192.168.198.239 -P 3346 -u admin -p hechunyang -d test > /dev/null &
注:你可以
shell> pkill pt-slave-repair
退出后臺(tái)進(jìn)程。
說明
-e, --enable-binlog Enable binary logging of the restore data
1、-e 選項(xiàng),默認(rèn)修復(fù)完的數(shù)據(jù)不會(huì)記錄在binlog文件里,如果你的slave是二級(jí)從庫(后面還接著一個(gè)slave),那么開啟這個(gè)選項(xiàng)。
2、開啟后臺(tái)守護(hù)進(jìn)程后,會(huì)自動(dòng)在當(dāng)前目錄下創(chuàng)建一個(gè)log目錄和{db_name}_INFO.log文件,該文件保存著日志信息。
圖片
圖片
注:支持MySQL 5.7/8.0和MariaDB數(shù)據(jù)庫,工具適用于Centos7 系統(tǒng)。
下載方式
此工具現(xiàn)通過dbaplus社群免費(fèi)為大家提供下載使用。若使用過程中有任何問題或建議,可隨時(shí)與我們聯(lián)系,歡迎大家試用。
登錄以下鏈接即可下載:https://github.com/hcymysql/pt-slave-repair
更多開源工具&腳本下載
圖片
工具研發(fā)者介紹
賀春旸,dbaplus社群金牌專家,凡普金科和愛錢進(jìn)DBA團(tuán)隊(duì)負(fù)責(zé)人,《MySQL管理之道:性能調(diào)優(yōu)、高可用與監(jiān)控》第一&二版、《MySQL運(yùn)維進(jìn)階指南》作者,曾任職于中國移動(dòng)飛信、安卓機(jī)鋒網(wǎng)。五次榮獲dbaplus年度MVP,致力于MariaDB、MongoDB等開源技術(shù)的研究,主要負(fù)責(zé)數(shù)據(jù)庫性能調(diào)優(yōu)、監(jiān)控和架構(gòu)設(shè)計(jì)。
工具下載:https://github.com/hcymysql/pt-slave-repair