前面幾篇文章介紹了DRBD+Heartbeat來增加MySQL Server的高可靠性, 並且加上Master-Slave Replication, 不過人為疏失總有可能出現, 所以接著我們來使用Percona Tool Kit來修復資料不同步的問題。

您還有印象的話, 我們在安裝Percona Server時, 也裝了Percona Tool Kit:
apt-get install percona-toolkit


我們先在正常的Replication環境裡, 於Master(db1)建立一個"test2"資料庫, 並且增加了一個表單叫"student", 測試我們就簡單做個表單即可。

回到Slave(rep), 進入MySQL console, 顯示"student"全部內容。


Slave機器正確的複製了test2.student, 接著把replication程序給停止, 
然後我將student_id為1的english欄位值從原本的"59"更改為"60"

回到Master, student_id=1的english欄位值仍是"59", Slave也重新啟動replication
START SLAVE;


資料不同步的問題已存在了。


Master的student_id=1的english欄位值為"59"。


可以看到Slave的student_id=1的english欄位是"60", 這時Percona Tool Kit上場, 來修復這個問題。

回到Master(db1), 使用工具pt-table-checksum來看問題所在:
pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --databases=test2 --replicate=test2.checksums h=192.168.1.192,u=root,p=rootpass


這行指令設定了:
資料庫"test2"(--databases=test2)
Checksum存放於"test2.checksums"資料表(--replicate=test2.checksums)
h=192.168.1.192為Master的IP位址
u=root為帳號名稱
p=rootpass為root帳號的密碼(請換成你真實的帳號與密碼)
"h=192.168.1.192,u=root,p=rootpass"這段可以用逗號連起來


執行結果, DIFFS顯示1, 有一處不同。

使用工具pt-table-sync來修復:
pt-table-sync --replicate=test2.checksums --databases=test2 --charset=utf8 --print h=192.168.1.192,u=root,p=rootpass


這行指令設定了:
Checksum在"test2.checksums"資料表(--replicate=test2.checksums)
資料庫"test2"(--databases=test2)
字元集utf8(--charset=utf8), 這很重要, 不然中文會亂碼
列印模式(--print), 顯示將會執行的SQL命令, 但不會真的去執行

列印出來的結果如下例:
REPLACE INTO `test2`.`student`(`student_id`, `student_name`, `chinese`, `english`, `math`) VALUES ('1', 'Ryan Lai', '60', '59', '40') /*percona-toolkit src_db:test2 src_tbl:student src_dsn:A=utf8,h=192.168.1.192,p=...,u=root dst_db:test2 dst_tbl:student dst_dsn:A=utf8,h=192.168.1.189,p=...,u=root lock:1 transaction:1 changing_src:test2.checksums replicate:test2.checksums bidirectional:0 pid:4765 user:root host:db1*/;


確認要修復, 使用--execute參數:
pt-table-sync --replicate=test2.checksums --databases=test2 --charset=utf8 --execute h=192.168.1.192,u=root,p=rootpass



再Slave(rep)上看, english欄位已恢復原來的值"59"。


Master(db1)上都沒有變動喔! 當然Master-Slave Replication也恢復正常運作。

以上是pt-table-sync工具的簡易範例
Mobile01 FB粉絲團 http://www.facebook.com/TheMobile01