Mysql資料一致性校正工具-pt-table-checksum

來源:互聯網
上載者:User

Mysql本身是沒有資料一致性的校正工具的(主要針對於master-slave), master-slave之間很容易出現資料不一致的情況,所以就有人開發出了這樣的工具,比較有名的是maatkit一系列工具,不過後台它貌似不更新了,現在主要由http://www.percona.com/doc/percona-toolkit/2.1/ percona 來維護。

其實maatkit這個工具去年就有瞭解過,因為當時總是覺得master-slave之間的資料有很大的不一致性,但是以前的那個庫主要是Myisam表,就不敢亂動,怕出現大量表死結的情況。

percona這套指令碼裡面有大量的功能,大多是一些統計之類的,但是還有幾個很牛逼的指令碼,簡單的說一下 pt-table-checksum和 pt-table-sync 。 用法自己看文檔就可以了,我主要說一下原理。

pt-table-checksum是檢驗兩個庫資料是否一致性的指令碼(也可以檢驗表)
pt-table-sync 是同步兩個庫(或者表)之間資料差異的指令碼

這兩個指令碼均使用Perl編寫,很長都有1W多行。

pt-table-checksum
 pt-table-checksum 檢查資料一致性的方法主要是通過,對一張表按照一個合適的索引進行全表掃描,這個指令碼還是比較只能的,索引不合適他不執行,他會把一張表分為若干個trunk,比如果一張表有300W行,分為100個trunk,那麼每個trunk就是有3W行,他會鎖定這個trunk,進行計算checksum並匹配。

 比如: master和slave都有一張表T,運行以下命令:

1 ./pt-table-checksum --create-replicate-table --host=`hostnmae -i` --databases=test --tables=t --port=4331 --explain -uroot -p123 

第一次使用的話,這個參數不能少:--create-replicate-table ,因為他主要初始化系統庫。後面加--explain 能列印出更詳細的資訊,比如我這次的test.t表:

1 REPLACE INTO `percona`.`checksums` (db, tbl, chunk, chunk_index, lower_boundary, upper_boundary, this_cnt, this_crc) SELECT ?, ?, ?, ?, ?, ?, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `a`, `b`, CONCAT(ISNULL(`a`), ISNULL(`b`)))) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `test`.`t` /*checksum table*/ 

 

上面這個語句會在主庫和從庫上都執行一下,通過計算的結果來判斷這個trunk的資料是否是一樣的。

他主要執行的就是這條語句,1W多行的Perl指令碼,就為了執行這個語句,其他的代碼主要是處理一些自適應的工作。
這個SQL看起來非常複雜,解釋一下他的原理吧:

它會把一個trunk裡面的每一行資料所有欄位拼成一個String,然後對String取32位校正碼,然後這個trunk內所有計算好的校正碼進行異或操作,從10進位轉換成16進位。從而主庫和從庫上都會有一個結果,叫做CRC,通過比較這個CRC判斷資料是否一致。雖然操作是一個trunk一個trunk進行的,但是他會對每個trunk 做select for update 主要是擔心做Checksum的時候會有寫入,所以每個Checksum不適合太大,他會等待Slave和Mater完全同步後對這個trunk做一次CheckSum然後把CheckSum的結果存入表中,如果Slave和master 有延遲他會預設等待1S等完全同步再做CheckSum。

我測試了一下,一個50G左右的表,跑一下指令碼,應該在一個小時之內就搞定了。
系統庫裡面有一張表就是專門用來存每一個trunk的校正結果的。

pt-table-sync
pt-table-sync 這個工具和pt-table-checksum原理類似,也是先找資料不一致的trunk,找到以後他會逐行進行比較,如果這張表沒有主鍵的話,這個過程是不能成功的,因為沒有主鍵的話無法判斷資料是否是一樣的,如果兩個trunk之間的資料差異比較小的話,會有update操作搞定他,如果發現不一致的非常多,則就會進行重建從庫上的表。

參考資料:
<a href='http://likydba-wordpress.stor.sinaapp.com/uploads/2012/08/Percona_Toolkit_2_1_2_Operations_Manual.pdf'>Percona_Toolkit_2_1_2_Operations_Manual</a>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.