如何使用pt工具校驗(yàn)修復(fù)主從-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“如何使用pt工具校驗(yàn)修復(fù)主從”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何使用pt工具校驗(yàn)修復(fù)主從”這篇文章吧。

堅(jiān)守“ 做人真誠(chéng) · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價(jià)值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都成都橡塑保溫小微創(chuàng)業(yè)公司專業(yè)提供成都定制網(wǎng)頁(yè)設(shè)計(jì)營(yíng)銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺(jué)設(shè)計(jì)、底層架構(gòu)、網(wǎng)頁(yè)布局、功能開(kāi)發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。

使用pt工具校驗(yàn)主從一致性并修復(fù)

【原理說(shuō)明】  

     pt-table-checksum 是 Percona-Toolkit 的組件之一,用于檢測(cè)MySQL主、從庫(kù)的數(shù)據(jù)是否一致。其原理是在主庫(kù)執(zhí)行基于statement的sql語(yǔ)句來(lái)生成主庫(kù)數(shù)據(jù)塊的checksum,把相同的sql語(yǔ)句傳遞到從庫(kù)執(zhí)行,并在從庫(kù)上計(jì)算相同數(shù)據(jù)塊的checksum,最后,比較主從庫(kù)上相同數(shù)據(jù)塊的checksum值,由此判斷主從數(shù)據(jù)是否一致。檢測(cè)過(guò)程根據(jù)唯一索引將表按row切分為塊(chunk),以為單位計(jì)算,可以避免鎖表。檢測(cè)時(shí)會(huì)自動(dòng)判斷復(fù)制延遲、 master的負(fù)載, 超過(guò)閥值后會(huì)自動(dòng)將檢測(cè)暫停,減小對(duì)線上服務(wù)的影響。
    pt-table-checksum 默認(rèn)情況下可以應(yīng)對(duì)絕大部分場(chǎng)景,官方說(shuō),即使上千個(gè)庫(kù)、上萬(wàn)億的行,它依然可以很好的工作,這源自于設(shè)計(jì)很簡(jiǎn)單,一次檢查一個(gè)表,不需要太多的內(nèi)存和多余的操作;必要時(shí),pt-table-checksum 會(huì)根據(jù)服務(wù)器負(fù)載動(dòng)態(tài)改變 chunk 大小,減少?gòu)膸?kù)的延遲。
    為了減少對(duì)數(shù)據(jù)庫(kù)的干預(yù),pt-table-checksum還會(huì)自動(dòng)偵測(cè)并連接到從庫(kù),當(dāng)然如果失敗,可以指定--recursion-method選項(xiàng)來(lái)告訴從庫(kù)在哪里。它的易用性還體現(xiàn)在,復(fù)制若有延遲,在從庫(kù) checksum 會(huì)暫停直到趕上主庫(kù)的計(jì)算時(shí)間點(diǎn)(也通過(guò)選項(xiàng)--設(shè)定一個(gè)可容忍的延遲大值,超過(guò)這個(gè)值也認(rèn)為不一致)。
    為了保證主數(shù)據(jù)庫(kù)服務(wù)的安全,該工具實(shí)現(xiàn)了許多保護(hù)措施:

    1)自動(dòng)設(shè)置 innodb_lock_wait_timeout 為1s,避免引起鎖

    2)默認(rèn)當(dāng)數(shù)據(jù)庫(kù)有25個(gè)以上的并發(fā)查詢時(shí),pt-table-checksum會(huì)暫停??梢栽O(shè)置 --max-load 選項(xiàng)來(lái)設(shè)置這個(gè)閥值
    3)當(dāng)用     Ctrl+C 停止任務(wù)后,工具會(huì)正常的完成當(dāng)前 chunk 檢測(cè),下次使用 --resume 選項(xiàng)啟動(dòng)可以恢復(fù)繼續(xù)下一個(gè)     chunk

【工作過(guò)程】

1. 連接到主庫(kù):pt工具連接到主庫(kù),然后自動(dòng)發(fā)現(xiàn)主庫(kù)的所有從庫(kù)。默認(rèn)采用show slave hosts來(lái)查找從庫(kù),但是這只有在主從實(shí)例端口相同的情況下才有效。

2. 查找主庫(kù)或者從庫(kù)是否有復(fù)制過(guò)濾規(guī)則:這是為了安全而默認(rèn)檢查的選項(xiàng)。你可以關(guān)閉這個(gè)檢查,但是這可能導(dǎo)致checksum的sql語(yǔ)句要么不會(huì)同步到從庫(kù),要么到了從庫(kù)發(fā)現(xiàn)從庫(kù)沒(méi)有要被checksum的表,這都會(huì)導(dǎo)致從庫(kù)同步卡庫(kù)。

3. 開(kāi)始獲取表,一個(gè)個(gè)的計(jì)算。

4. 如果是表的第一個(gè)chunk,那么chunk-size一般為1000;如果不是表的第一個(gè)chunk,那么采用12步中分析出的結(jié)果。

5. 檢查表結(jié)構(gòu),進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換等,生成checksum的sql語(yǔ)句。

6. 根據(jù)表上的索引和數(shù)據(jù)的分布,選擇最合適的split表的方法。

7. 開(kāi)始checksum表。

8. 默認(rèn)在chunk一個(gè)表之前,先刪除上次這個(gè)表相關(guān)的計(jì)算結(jié)果。除非–resume。

9. 根據(jù)explain的結(jié)果,判斷chunk的size是否超過(guò)了你定義的chunk-size的上限。如果超過(guò)了,為了不影響線上性能,這個(gè)chunk將被忽略。

10. 把要checksum的行加上for update鎖,并計(jì)算。

11. 把計(jì)算結(jié)果存儲(chǔ)到master_crc master_count列中。

12. 調(diào)整下一個(gè)chunk的大小。

13. 等待從庫(kù)追上主庫(kù)。如果沒(méi)有延遲備份的從庫(kù)在運(yùn)行,最好檢查所有的從庫(kù),如果發(fā)現(xiàn)延遲大的從庫(kù)延遲超過(guò)max-lag秒,pt工具在這里將暫停。

14. 如果發(fā)現(xiàn)主庫(kù)的max-load超過(guò)某個(gè)閾值,pt工具在這里將暫停。

15. 繼續(xù)下一個(gè)chunk,直到這個(gè)table被chunk完畢。

16. 等待從庫(kù)執(zhí)行完checksum,便于生成匯總的統(tǒng)計(jì)結(jié)果。每個(gè)表匯總并統(tǒng)計(jì)一次。

17. 循環(huán)每個(gè)表,直到結(jié)束。


【校驗(yàn)?zāi)_本】


pt工具如果使用不當(dāng),會(huì)影響業(yè)務(wù)正常使用,甚至出現(xiàn)死鎖情況,下面結(jié)合生產(chǎn)經(jīng)驗(yàn),使用如下參數(shù)進(jìn)行校驗(yàn)

  • TS :完成檢查的時(shí)間戳。

  • ERRORS     :檢查時(shí)候發(fā)生錯(cuò)誤和警告的數(shù)量。

  • DIFFS :不一致的chunk數(shù)量。當(dāng)指定 --no-replicate-check 即檢查完但不立即輸出結(jié)果時(shí),會(huì)一直為0;當(dāng)指定 --replicate-check-only 即不檢查只從checksums表中計(jì)算crc32,且只顯示不一致的信息(畢竟輸出的大部分應(yīng)該是一致的,容易造成干擾)。

  • ROWS :比對(duì)的表行數(shù)。

  • CHUNKS :被劃分到表中的塊的數(shù)目。

  • SKIPPED     :由于錯(cuò)誤或警告或過(guò)大,則跳過(guò)塊的數(shù)目。

  • TIME :執(zhí)行的時(shí)間。

  • TABLE :被檢查的表名

【修復(fù)腳本】

點(diǎn)擊(此處)折疊或打開(kāi)

  1. user=""

  2. password=""

  3. charset="utf8mb4"

  4. replicate="pt.checksum"

  5. chunk_size="1500"

  6. pid="/data/script/mysql/pt-table-sync.pid"

  7. sync_to_master="h=10.9.129.33,P=3306"

  8. tables="kuaikan.device_push_info"

  9. /usr/bin/pt-table-sync  \

  10. --user=${user} \

  11. --password=${password} \

  12. --pid=${pid}  \

  13. --bin-log \

  14. --tables="${tables}" \

  15. --buffer-in-mysql  \

  16. --no-buffer-to-client \

  17. --charset=${charset} \

  18. --no-check-child-tables \

  19. --no-foreign-key-checks  \

  20. --check-master \

  21. --replicate=${replicate} \

  22. --sync-to-master  ${sync_to_master} \

  23. --check-slave \

  24. --check-triggers \

  25. --chunk-size=${chunk_size} \

  26. --print \

  27. --transaction \

  28. --verbose

【修復(fù)腳本參數(shù)說(shuō)明】


1)print只是打印需要執(zhí)行的命令,確認(rèn)無(wú)誤后把參數(shù)—print改成—execute
2)sync_to_master此處填寫(xiě)從庫(kù)的地址,只需要填寫(xiě)從庫(kù)地址,會(huì)自動(dòng)從從庫(kù)show slave status獲取主庫(kù)的信息,不需要再寫(xiě)主庫(kù)的地址,寫(xiě)了從庫(kù)地址后,會(huì)根據(jù)從庫(kù)差異對(duì)這個(gè)從庫(kù)進(jìn)行更改,無(wú)論如何都是在master端執(zhí)行。并不會(huì)對(duì)其他從庫(kù)的差異進(jìn)行修復(fù)。
3)no-buffer-to-client如果禁用該選項(xiàng)的話,MySQL會(huì)一次性發(fā)送所有的rows,針對(duì)大表
4)lock參數(shù)如果 使用—replicate 或者 –sync-to-master 參數(shù)時(shí),slave端 是不會(huì)鎖表的。鎖表的時(shí)候使用的是 lock tables ,但是如果使用 --transaction 的話,就是在事務(wù)開(kāi)始到提交這一段,開(kāi)始鎖表

以上是“如何使用pt工具校驗(yàn)修復(fù)主從”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

當(dāng)前標(biāo)題:如何使用pt工具校驗(yàn)修復(fù)主從-創(chuàng)新互聯(lián)
當(dāng)前地址:http://www.muchs.cn/article20/dgisco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、標(biāo)簽優(yōu)化微信小程序、Google電子商務(wù)、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)