天天看點

對比MySQL表資料内容方式彙總

<b>一. </b>mysql自帶的checksum指令: 可在不同伺服器通過checksum值對比兩張表是否一緻, 加上extended參數表示逐行掃描, 結果更為可靠; 執行過程會給表加上system lock, 參考:https://dev.mysql.com/doc/refman/5.7/en/checksum-table.html

對比MySQL表資料内容方式彙總

可通過對比checksum值來判斷表是否一緻; 粒度比較粗, 不能具體知道哪些資料不一緻. 其優點是速度較快, 可先用checksum判斷表是否一緻, 然後再用其他工具進一步檢查資料内容.

<b>二. </b>常用pt工具能高效地檢查主從一緻性, 但前提是有主從關系

主: *.*.*.39

從: *.*.*.43

對比MySQL表資料内容方式彙總

--print 即可生成修複腳本; 該工具效率比較高, 每次僅對chunk加讀鎖, 能生成修補資料的腳本.

pt工具足夠強大不多說, 但以下情形不适合使用:

1)兩台伺服器無主從關系

2)有主從關系, 但隻想檢查主從資料差異, 不希望資料開始複制帶來負面影響

3)有主從關系, 但有複制延遲或主庫壓力過大

<b>三.</b> 常見圖形工具sqlyog提供了data comparison, 配置好源和目标的連接配接, 選好需要對比的表, 就可以開始對比了. 對比好後, 可選出資料不一緻的内容, 然後生成相應的修複腳本

對比MySQL表資料内容方式彙總

<b>注意</b>: 當發現一個資料不同的時候, 會停止運作, 需要點選next difference才能把腳本完全整理出來, 不太友善.

圖形工具sqlyog效率非常高, 僅次于pt工具. 但有限制: 當主鍵大小寫敏感的時候, 不能比較, 出現如下錯誤; 且該工具為圖形界面, 不提供指令行支援, 是以認為其通用性低

對比MySQL表資料内容方式彙總

<b>四. </b>red-gate提供了很多sql server的工具, 發現它的mysql data compare也是可以對比的. 沒有用過sql server會比較陌生, 位址:http://www.red-gate.com/products/mysql/mysql-data-compare/

選好想要對比的兩個資料庫:

對比MySQL表資料内容方式彙總

選擇需要對比的表:

對比MySQL表資料内容方式彙總

開始對比:

對比MySQL表資料内容方式彙總

在對比的同時, 去mysql觀察其原理: 把表拉回本地, 程式内部對資料逐行對比, 對比過程會執行以下語句.

對比MySQL表資料内容方式彙總

會看到相當多的時間耗在writing to net, 可增大max_allowed_packet 值提高網絡傳輸效率; 對比結束後, 可以看到如下結果

對比MySQL表資料内容方式彙總

然後點選deployment wizard就可以生成修複資料的腳本了

對比MySQL表資料内容方式彙總
對比MySQL表資料内容方式彙總

用了幾次之後, 會卡在planning deployment幾個小時才出結果; 畢竟是免費版本, 按官方步驟操作沒發序列号過來. 官方稱: the mysql tools now benefit from a free edition for non-commercial use. we are, however, unable to provide support for this edition. 介紹該工具隻為多掌握一種檢查資料的方法, 僅供參考

<b>五. </b>mysqldbcompare來自mysql官方工具utilities, 但實際上各方面幾乎最差, 是筆者最不推薦的一個:

對比MySQL表資料内容方式彙總

原理: 在給定的兩台伺服器上, 分别串行分組校驗, 注意到是一台伺服器校驗完, 再到下一台伺服器校驗, 效率極其低下, 但效率最低; 而且隻是2g的表, 對比過程中就莫名其妙的被kill掉, 而且不能指定檢查某張表

下面是5種對比表資料内容工具的總結:

對比MySQL表資料内容方式彙總

轉自: http://120.76.165.139/wordpress-master/index.php/2017/02/17/mysql-data-comparison/