いくつかの質問
スレーブに影響を与える可能性のあるマスターのテーブルへの挿入/更新/削除があるまで、スレーブエントリは残りますか?
そうでない場合は、スレーブがマスターと同期していることをどのように確認しますか(スレーブエントリを削除するか、そのエントリをマスターに手動でコピーします)?
最も重要なのは、テーブルが同期していないことをどのように検出するかです。
いくつかの質問
スレーブに影響を与える可能性のあるマスターのテーブルへの挿入/更新/削除があるまで、スレーブエントリは残りますか?
そうでない場合は、スレーブがマスターと同期していることをどのように確認しますか(スレーブエントリを削除するか、そのエントリをマスターに手動でコピーします)?
最も重要なのは、テーブルが同期していないことをどのように検出するかです。
回答:
INSERT / UPDATE / DELETEステートメントをスレーブ上で直接実行しない限り、スレーブは問題ありません。そうしないと、スレーブのmydb.mytableに新しい行を挿入すると、MySQLレプリケーションが中断する可能性があり、レプリケーションを介して、スレーブは同じPRIMARY KEYを持つmydb.mytableへの行のINSERTを後で検出します。これにより、エラー1062(重複キー)が生成されます。
MySQLレプリケーションを中断せずにスレーブに書き込むことができる唯一の方法は次のとおりです。
CREATE DATABASE db4;
スレーブで実行しますツールをダウンロードせずにマスターとスレーブが同期していないことを検出するには、任意のテーブルを選択し、マスター上のテーブルと同じテーブルのスレーブのコピーに対してCHECKSUM TABLEを実行します。
例
テーブルがある場合mydb.mytable
、それに対してコマンドを実行します。
mysql> CHECKSUM TABLE mydb.mytable;
値が同じに戻らない場合は、何かが非同期になっています。
大量のテーブルをまとめて調べる場合は、PerconaのMAATKITをダウンできます。2つの特定のツールが必要になります(Perconaには、さらに昇格されているMAATKITから分岐したPercona Toolkitもあります)
または
pt-table-checksum
マスターとスレーブのすべてのテーブルに対してCHECKSUM TABLEを実行します。特定のデータベースのみですべてのデータベースを実行するように構成できます。
pt-table-sync
任意のテーブルに対してスレーブで実行できます。--printおよび--sync-to-masterオプションを使用すると、スレーブでマスターと完全に一致させるためにスレーブで実行する必要があるSQLステートメントを確認できます。このツールは、PRIMARY KEYまたはUNIQUE KEYがないテーブルでは機能しません。
私は何年もMAATKITを使用しています。私はまだしています。Percona Toolkitはまだ試していませんが、MAATKITと同じ品質であるはずです。