このセクションでは、レプリケーションフィルタリングオプションのさまざまな組み合わせの追加説明と例を示します。
次の表に、レプリケーションフィルタルールのいくつかの典型的な組み合わせをいくつか示します。
条件 (オプションのタイプ) | 結果 |
---|---|
--replicate-* オプションが全然ない |
スレーブはマスターから受け取るすべてのイベントを実行します。 |
--replicate-*-db オプション、しかしテーブルオプションがない |
スレーブは、データベースオプションを使用してイベントを受け入れるか無視します。テーブル制約がないため、これらのオプションで許可されるすべてのイベントを実行します。 |
--replicate-*-table オプション、しかしデータベースオプションがない |
データベース条件がないため、データベース検査段階ですべてのイベントが受け入れられます。スレーブは、テーブルオプションにのみ基づいてイベントを実行または無視します。 |
データベースおよびテーブルオプションの組み合わせ | スレーブは、データベースオプションを使用してイベントを受け入れるか無視します。それから、テーブルオプションに従ってこれらのオプションで許可されるすべてのイベントを評価します。これは、直観に反しているように見えたり、ステートメントベースまたは行ベースレプリケーションのどちらを使用するかによって異なる結果となったりする場合があります。例のテキストを参照してください。 |
より複雑な例を示します。ステートメントベースおよび行ベースの両方の設定の結果を調べます。
データベース db1
内に mytbl1
、データベース db2
内に mytbl2
という 2つのテーブルがマスター上にあり、スレーブが次のオプションで動作していると想定します (ほかのレプリケーションフィルタリングオプションはない)。
replicate-ignore-db = db1
replicate-do-table = db2.tbl2
ここで、次のステートメントをマスター上で実行します。
USE db1;
INSERT INTO db2.tbl2 VALUES (1);
スレーブでの結果はバイナリログ形式によって大きく異なり、どちらかのケースで当初の予測に一致しない場合があります。
ステートメントベースのレプリケーション
USE
ステートメントによって db1
がデフォルトデータベースになります。このため、--replicate-ignore-db
オプションが一致し、INSERT
ステートメントが無視されます。テーブルオプションは検査されません。
行ベースのレプリケーション
デフォルトデータベースは、行ベースレプリケーションを使用するときにスレーブがデータベースオプションをどのように読み取るかに影響しません。その結果、USE
ステートメントは --replicate-ignore-db
オプションがどのように処理されるかに違いをもたらしません。このオプションで指定されるデータベースは INSERT
ステートメントがデータを変更するデータベースに一致しないため、スレーブはテーブルオプションの検査に進みます。--replicate-do-table
で指定されるテーブルは、更新すべきテーブルに一致し、行が挿入されます。