オープンソースのPerconaToolkitをチェックしてください---具体的には、 pt-table-sync 効用。
その主な目的はMySQLテーブルをそのレプリカと同期することですが、その出力は2つのテーブル間の違いを調整するために必要なMySQLコマンドのセットであるため、2つを比較するのに自然に適合します。
内部で実際に行うことは少し複雑で、テーブルについて何を伝えることができるか(インデックスなど)に応じて実際には異なるアプローチを使用しますが、基本的な考え方の1つは、高速のCRC32チェックサムを実行することですインデックスのチャンクについて 、およびチェックサムが一致しない場合は、それらのレコードをより詳細に調べます。この方法は多くであることに注意してください 両方のインデックスを直線的に歩いて比較するよりも高速です。
ただし、それは途中でしか得られません。生成されたコマンドはレプリカをそのマスターと同期することを目的としているため、すべての異なるレコードのレプリカの現在の内容を置き換えるだけです。つまり、生成されたコマンドはall
を変更します レコード内のフィールド(変更されたフィールドだけでなく)。したがって、pt-table-sync
を使用すると 差異を見つけるには、結果を何かにラップして、レコードの各フィールドを比較することにより、異なるレコードを調べる必要があります。
ただし、pt-table-sync
あなたがすでに難しい部分であると知っていたことを行います:差分の検出、本当に 速い。 Perlで書かれています。ソースは優れたパンくずリストを提供する必要があります。