主從校驗工具pt-table-checksum和pt-table-sync工做原理

  pt-table-checksum和pt-table-sync是經常使用來作MySQL主從數據一致性校驗的工具,pt-table-checksum只校驗數據,不能對數據進行同步;pt-table-sync不只能夠檢驗數據,還能夠將不一致的數據同步。
工做原理
  兩個工具的工做原理基本差很少,分開說明。爲了說明簡單易懂,拋開了全部內部函數,只是簡易的介紹一下工具的工做過程。
pt-table-checksum工做原理
1.單行數據checksum值的計算
  首先檢查表結構,獲取每列的數據類型,把全部類型都轉換爲字符串,把一整行數據拼接成一個很長的字符串,這行數據計算出一個校驗值。就是經過這個值進行主從比較的,若是主從兩個值一致,則數據一致,反之亦然。
2.數據塊checksum值的計算
  對於大表,進行單行的比較,勢必工做量很大。數據塊的比較就順勢而出,其實和單行拼接的原理相似,整塊比較只是把一個數據塊做爲一個單位,拼接成一個長字符串,計算出校驗值。說是數據塊,實際上是按索引來取值進行比較的。所以對於塊計算,就須要表有主鍵或惟一索引。
3.主從一致性比較
  主庫上計算的過程sql經過binlog傳遞到從庫進行從庫計算,主庫的計算結果存儲到一個pt.checksums統計表中,而後將表經過binlog日誌方式傳遞到從庫。從庫根據計算過程sql計算出數據塊的校驗值,並把值更新到pt.checksums表中。再經過比較pt.checksums表上主從庫的計算值,來比較主從數據是否一致。
  當計算某個數據塊的值時,主庫可能還有更新,爲保證校驗的是同一份數據,須要對正在計算的數據塊加for update鎖,加上鎖的同時show master status獲取主庫的日誌點。這樣傳到從庫時,從庫執行到該日誌點時就wait,直到校驗完數據塊。
  ye,校驗的過程就是這麼簡單。
 
pt-table-sync工做原理
1.單行數據checksum值的計算
2.數據塊checksum值的計算
3.主從一致性比較
1,2,3步的原理和上面的同樣,就不重複了。
  上面的校驗過程只是發現不一致的數據塊,發現後就須要深刻到塊內部,一條條語句比較了,找出那條語句不一致了,並生產replace into語句在主庫上執行(注意,不能是insert。這分爲兩種狀況:一是有惟一性主鍵,若是有惟一性主鍵或者索引,則insert相同記錄會在主庫上插入失敗;二是沒有惟一性主鍵或者索引,insert相同記錄會形成記錄重複。故要求pt-table-sync的表必需要有惟一性主鍵或者索引)。
  以後一塊塊,一從從的進行校驗,遞歸進行直到over。
總結:
  MySQL只要涉及到主從,都能和binlog扯上關係,嗯,好好理解binlog。
 
 
 

原文出處:https://www.cnblogs.com/nandi001/p/11727724.htmlhtml

相關文章
相關標籤/搜索