MySQL Master / Slaveレプリケーションでは、スレーブに書き込むとどうなりますか?


17

いくつかの質問

  • スレーブに影響を与える可能性のあるマスターのテーブルへの挿入/更新/削除があるまで、スレーブエントリは残りますか?

  • そうでない場合は、スレーブがマスターと同期していることをどのように確認しますか(スレーブエントリを削除するか、そのエントリをマスターに手動でコピーします)?

  • 最も重要なのは、テーブルが同期していないことをどのように検出するかです。


あなたの質問を適切に説明してください...
アブドゥルマナフ

1
マスター/スレーブ関係は、マスターからスレーブへの一方向の同期ではありませんか?この種のセットアップでスレーブに書き込みをするとどうなるかを聞いています。
kfmfe04

回答:


14

INSERT / UPDATE / DELETEステートメントをスレーブ上で直接実行しない限り、スレーブは問題ありません。そうしないと、スレーブのmydb.mytableに新しい行を挿入すると、MySQLレプリケーションが中断する可能性があり、レプリケーションを介して、スレーブは同じPRIMARY KEYを持つmydb.mytableへの行のINSERTを後で検出します。これにより、エラー1062(重複キー)が生成されます。

MySQLレプリケーションを中断せずにスレーブに書き込むことができる唯一の方法は次のとおりです。

  • マスターにはデータベースdb1、db2、db3があります
  • スレーブはマスターからデータベースdb1、db2、db3を複製しています
  • CREATE DATABASE db4;スレーブで実行します
  • スレーブ上のdb4に対してのみINSERT / UPDATE / DELETEを実行します
  • スレーブのdb1、db2、db3に対してのみINSERT / UPDATE / DELETEを実行しない

ツールをダウンロードせずにマスターとスレーブが同期していないことを検出するには、任意のテーブルを選択し、マスター上のテーブルと同じテーブルのスレーブのコピーに対して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と同じ品質であるはずです。


詳細な答えはty。私はもっ​​と質問があると思ったが、あなたの答えはすべてのケースをカバーしたと思う(pt-table-syncは本当に役立つようだ)。
kfmfe04
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.