當我用pt-table-sync命令--print或者--execute時,報如下錯誤:
[root@PC ~]# pt-table-sync --replicate=ccda.checksums --tables=pending_0 --charset=utf8 h=127.0.0.1,u=root,p=system@123 h=192.168.1.202 u=root,p=system@123 --port 3307 --print > /download/diff.log
Failed to prepare TableSyncChunk plugin: Cannot chunk table `ccda`.`pending_0` using the character column _id, most likely because all values start with the same character. This table must be synced separately by specifying a list of --algorithms without the Chunk algorithm at /usr/local/bin/pt-table-sync line 4049. while doing ccda.pending_0 on 192.168.1.202
而且,我發現,當差異量小時,並不報該錯誤。差異量大時,才報了這個錯誤。
雖然報錯,但是用--execute發現,實際上也同步了大部分資料,會丟失部分資料。比如,我測試的表差異資料應該是45萬條記錄,但是發現只同步了34萬資料。
pt-table-sync --help
查看algorithms
--algorithms=s Algorithm to use when comparing the tables, in
order of preference (default Chunk,Nibble,GroupBy,
Stream)
--解決辦法:
用Nibble演算法同步(其他演算法我沒有實驗,不知是否可行)。
pt-table-sync --algorithms=Nibble --replicate=ccda.checksums --tables=pending_0 --charset=UTF8 h=127.0.0.1,u=root,p=system@123 h=192.168.1.202 u=root,p=system@123 --port 3307 --execute
--注意:--charset=UTF8最好指定是大寫的UTF8,因為我發現在有的機器上指定了小寫utf8,還是會出現中文亂碼。