マスターが 1 つで、異なるデータベースを異なるスレーブに複製したい場合があります。たとえば、データ分析時の負荷を分散するために、異なる売上データを異なる部門に分散したい場合です。このレイアウトの例を図17.2「データベースを別個のレプリケーションスレーブに複製するためにレプリケーションを使用する」に示します。
この分散は、マスターとスレーブを通常どおり構成してから、各スレーブ上で --replicate-wild-do-table
構成オプションを使用して各スレーブが処理するバイナリログステートメントを制限することで、実現できます。
ステートメントベースレプリケーションを使用するときに、この目的のために --replicate-do-db
を使用してはいけません。ステートメントベースレプリケーションでは、このオプションの効果が、現在選択されているデータベースによって異なるためです。このことは、混合形式のレプリケーションにも当てはまります。一部の更新をステートメントベース形式を使用して複製できるためです。
しかし、行ベースレプリケーションだけを使用している場合には、この目的のために --replicate-do-db
を使用しても安全なはずです。この場合には、現在選択されているデータベースがオプションの動作に影響しないためです。
たとえば、図17.2「データベースを別個のレプリケーションスレーブに複製するためにレプリケーションを使用する」 に示すような分散をサポートするには、START SLAVE
を実行する前に、各レプリケーションスレーブを次のように構成してください。
レプリケーションスレーブ 1 は
--replicate-wild-do-table=databaseA.%
を使用するべきです。レプリケーションスレーブ 2 は
--replicate-wild-do-table=databaseB.%
を使用するべきです。レプリケーションスレーブ 3 は
--replicate-wild-do-table=databaseC.%
を使用するべきです。
この構成の各スレーブはマスターからバイナリログ全体を受け取りますが、そのバイナリログから、そのスレーブで有効な --replicate-wild-do-table
オプションによって含まれるデータベースとテーブルに適用されるイベントだけを実行します。
レプリケーションが開始する前にスレーブに同期する必要があるデータがある場合、いくつかの選択肢があります。
すべてのデータを各スレーブに同期し、保持したくないデータベースまたはテーブル、あるいはその両方を削除します。
mysqldump を使用してデータベースごとに別々のダンプファイルを作成し、各スレーブに該当するダンプファイルをロードします。
-
ローデータファイルダンプを使用して、各スレーブに必要な固有のファイルとデータベースのみを含めます。
注記これは、
innodb_file_per_table
を使用しないかぎり、InnoDB
データベースでは機能しません。