MySQL マルチソースレプリケーションでは、レプリカはソースサーバーごとに複数のレプリケーションチャネルを開きます。 レプリケーションチャネルは、ソースからレプリカに流れるトランザクションのパスを表します。 各レプリケーションチャネルには、独自の受信者 (I/O) スレッド、1 つ以上の適用者 (SQL) スレッドおよびリレーログがあります。 ソースからのトランザクションがチャネルレシーバスレッドによって受信されると、トランザクションはチャネルリレーログファイルに追加され、チャネルアプライヤスレッドに渡されます。 これにより、各チャネルは個別に機能できます。
このセクションでは、レプリケーショントポロジでチャネルを使用する方法と、チャネルが単一ソースレプリケーションに与える影響について説明します。 マルチソースレプリケーションのソースおよびレプリカの構成、マルチソースレプリカの起動、停止およびリセット、およびマルチソースレプリケーションの監視の手順は、セクション17.1.5「MySQL マルチソースレプリケーション」 を参照してください。
マルチソースレプリケーショントポロジの 1 つのレプリカサーバーに作成できるチャネルの最大数は 256 です。 各レプリケーションチャネルには、セクション17.2.2.4「レプリケーションチャネルのネーミング規則」 で説明されている一意の (空でない) 名前が必要です。 マルチソースレプリケーションが有効な場合に発行されるエラーコードおよびメッセージは、エラーを生成したチャネルを指定します。
マルチソースレプリカ上の各チャネルは、異なるソースからレプリケートする必要があります。 単一のレプリカから単一のソースに複数のレプリケーションチャネルを設定することはできません。 これは、レプリカのサーバー ID がレプリケーショントポロジ内で一意である必要があるためです。 ソースはレプリカをサーバー ID でのみ区別し、レプリケーションチャネルの名前では区別しないため、同じレプリカとは異なるレプリケーションチャネルを認識できません。
マルチソースレプリカは、slave_parallel_workers
システム変数を 0 より大きい値に設定することで、マルチスレッドレプリカとして設定することもできます。 マルチソースレプリカでこれを行う場合、レプリカ上の各チャネルには、指定された数のアプライヤスレッドと、それらを管理するためのコーディネータスレッドがあります。 個々のチャネルのアプライヤスレッドの数は構成できません。
MySQL 8.0 から、特定のレプリケーションチャネルでレプリケーションフィルタを使用してマルチソースレプリカを構成できます。 チャネル固有のレプリケーションフィルタは、同じデータベースまたはテーブルが複数のソースに存在し、単一のソースからレプリケートする場合にのみ使用できます。 GTID ベースのレプリケーションでは、(ダイアモンドトポロジなどの) 複数のソースから同じトランザクションが到着する可能性がある場合、フィルタリング設定がすべてのチャネルで同じであることを確認する必要があります。 詳細は、セクション17.2.5.4「レプリケーションチャネルベースのフィルタ」を参照してください。
以前のバージョンとの互換性を提供するために、MySQL サーバーは起動時に、名前が空の文字列 (""
) であるデフォルトチャネルを自動的に作成します。 このチャネルは常に存在します。ユーザーが作成または破棄することはできません。 他のチャネル (空でない名前を持つ) が作成されていない場合、レプリケーションステートメントはデフォルトチャネルでのみ機能するため、古いレプリカからのすべてのレプリケーションステートメントは予想どおりに機能します (セクション17.2.2.2「以前のレプリケーションステートメントとの互換性」 を参照)。 このセクションで説明するように、レプリケーションチャネルに適用するステートメントは、少なくとも 1 つの名前付きチャネルがある場合にのみ使用できます。