web-dev-qa-db-ja.com

pt-table-checksumによって報告されたテーブルの非同期の修正、pt-table-syncが機能しない

次のコマンドを使用して、マスターサーバーとスレーブサーバー間でCRC_DIFFを指定したpt-table-checksumによって報告されるいくつかのテーブルがあります。

$ pt-table-checksum h=master,u=user,p=password --empty-replicate-table --databases db --replicate systemadministration.checksums
$ pt-table-checksum h=master,u=user,p=password --databases db --replicate systemadministration.checksums --replicate-check 1

結果:

Differences on P=3306,h=slave
DB         TBL                         CHUNK CNT_DIFF CRC_DIFF BOUNDARIES
db         table1                          0        0        1 1=1
db         table2                          0        0        1 1=1
db         table3                          0        0        1 1=1
db         table4                          0        0        1 1=1
db         table5                          0        0        1 1=1
db         table6                          0        0        1 1=1
db         table7                          0        0        1 1=1

しかし、pt-table-syncを実行すると、スクリプトは終了コード0を返し、問題はないと言っています。

$ pt-table-sync --execute --verbose --no-bin-log --tables db.table1 h=master,u=user,p=password h=slave
# Syncing h=slave,p=...,u=user
# DELETE REPLACE INSERT UPDATE ALGORITHM START    END      EXIT DATABASE.TABLE
#      0       0      0      0 GroupBy   14:10:45 14:12:12 0    db.table1
$ echo $?
0

チェックサムコマンドのさまざまなアルゴリズムを試してみましたが、うまくいきませんでした。

$ pt-table-checksum h=master,u=user,p=password --empty-replicate-table --algorithm=ACCUM --tables db.table1 --replicate systemadministration.checksums
DATABASE   TABLE                       CHUNK Host                   ENGINE      COUNT         CHECKSUM TIME WAIT STAT  LAG
db         table1                          0 master                 MyISAM     141836 00141836D0139746   22 NULL NULL NULL
$ pt-table-checksum h=master,u=user,p=password --tables db.table1 --replicate systemadministration.checksums --replicate-check 1
Differences on P=3306,h=slave
DB         TBL                         CHUNK CNT_DIFF CRC_DIFF BOUNDARIES
db         table1                          0        0        1 1=1
$ echo $?
1

ヒントまたはデータの整合性を検証するために使用できる他のツールはありますか?

3
stanleykylee

この問題の通常の原因は、pt-table-syncが高速で安価であるため、ハッシュアルゴリズムとしてCRC32を使用していることですが、衝突が発生する可能性もあります。たとえば、「codding」と「gnu」は同じcrc32を持っています。関数としてMD5を使用して再試行することをお勧めします。

4
Baron Schwartz