久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何使用pt工具校驗修復主從

159次閱讀
沒有評論

共計 3017 個字符,預計需要花費 8 分鐘才能閱讀完成。

這篇文章主要為大家展示了“如何使用 pt 工具校驗修復主從”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“如何使用 pt 工具校驗修復主從”這篇文章吧。

使用 pt 工具校驗主從一致性并修復【原理說明】 

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

    1)自動設置  innodb_lock_wait_timeout  為 1s,避免引起鎖

    2)默認當數據庫有 25 個以上的并發查詢時,pt-table-checksum 會暫停。可以設置  –max-load  選項來設置這個閥值
    3)當用
    Ctrl+C 停止任務后,工具會正常的完成當前 chunk 檢測,下次使用  –resume  選項啟動可以恢復繼續下一個
    chunk

【工作過程】

1.
連接到主庫:pt 工具連接到主庫,然后自動發現主庫的所有從庫。默認采用 show slave hosts 來查找從庫,但是這只有在主從實例端口相同的情況下才有效。

2.
查找主庫或者從庫是否有復制過濾規則:這是為了安全而默認檢查的選項。你可以關閉這個檢查,但是這可能導致 checksum 的 sql 語句要么不會同步到從庫,要么到了從庫發現從庫沒有要被 checksum 的表,這都會導致從庫同步卡庫。

3. 開始獲取表,一個個的計算。

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

5. 檢查表結構,進行數據類型轉換等,生成 checksum 的 sql 語句。

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

7. 開始 checksum 表。

8. 默認在 chunk 一個表之前,先刪除上次這個表相關的計算結果。除非–resume。

9.
根據 explain 的結果,判斷 chunk 的 size 是否超過了你定義的 chunk-size 的上限。如果超過了,為了不影響線上性能,這個 chunk 將被忽略。

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

11. 把計算結果存儲到 master_crc master_count 列中。

12. 調整下一個 chunk 的大小。

13.
等待從庫追上主庫。如果沒有延遲備份的從庫在運行,最好檢查所有的從庫,如果發現延遲最大的從庫延遲超過 max-lag 秒,pt 工具在這里將暫停。

14. 如果發現主庫的 max-load 超過某個閾值,pt 工具在這里將暫停。

15. 繼續下一個 chunk,直到這個 table 被 chunk 完畢。

16. 等待從庫執行完 checksum,便于生成匯總的統計結果。每個表匯總并統計一次。

17. 循環每個表,直到結束。

【校驗腳本】

pt 工具如果使用不當,會影響業務正常使用,甚至出現死鎖情況,下面結合生產經驗,使用如下參數進行校驗

TS:完成檢查的時間戳。

ERRORS
   :檢查時候發生錯誤和警告的數量。

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

ROWS:比對的表行數。

CHUNKS:被劃分到表中的塊的數目。

SKIPPED
   :由于錯誤或警告或過大,則跳過塊的數目。

TIME:執行的時間。

TABLE:被檢查的表名

【修復腳本】

點擊 (此處) 折疊或打開

user=

password=

charset= utf8mb4

replicate= pt.checksum

chunk_size= 1500

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

sync_to_master= h=10.9.129.33,P=3306

tables= kuaikan.device_push_info

/usr/bin/pt-table-sync  \

–user=${user} \

–password=${password} \

–pid=${pid}  \

–bin-log \

–tables= ${tables} \

–buffer-in-mysql  \

–no-buffer-to-client \

–charset=${charset} \

–no-check-child-tables \

–no-foreign-key-checks  \

–check-master \

–replicate=${replicate} \

–sync-to-master  ${sync_to_master} \

–check-slave \

–check-triggers \

–chunk-size=${chunk_size} \

–print \

–transaction \

–verbose

【修復腳本參數說明】

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

以上是“如何使用 pt 工具校驗修復主從”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-27發表,共計3017字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 合阳县| 体育| 图片| 北碚区| 沐川县| 宜君县| 中宁县| 嘉黎县| 常宁市| 光山县| 缙云县| 乌兰县| 衡山县| 西昌市| 曲靖市| 平陆县| 五华县| 朝阳区| 蒙城县| 武汉市| 稷山县| 大城县| 福鼎市| 佛坪县| 平谷区| 高陵县| 都匀市| 华宁县| 班玛县| 泸西县| 团风县| 德安县| 永年县| 兴义市| 通山县| 紫云| 大竹县| 阿城市| 沁水县| 宁陵县| 石林|