MySQL 8.0.16 から、グループレプリケーションにはグループの通信プロトコルの概念があります。 Group Replication 通信プロトコルのバージョンは明示的に管理でき、グループでサポートする最も古い MySQL Server バージョンに対応するように設定できます。 これにより、下位互換性を確保しながら、異なる MySQL Server バージョンのメンバーからグループを形成できます。 MySQL 5.7.14 のバージョンではメッセージを圧縮でき、MySQL 8.0.16 のバージョンではメッセージを断片化することもできます。 グループメンバーが異なる MySQL Server リリースを使用できるように、グループのすべてのメンバーは同じ通信プロトコルバージョンを使用する必要がありますが、すべてのグループメンバーが理解できるメッセージのみを送信します。
バージョン X の MySQL サーバーは、グループ通信プロトコルのバージョンが X 以下の場合にのみ、レプリケーショングループの ONLINE
ステータスに参加して到達できます。 新しいメンバーがレプリケーショングループに参加すると、グループの既存のメンバーによって通知される通信プロトコルバージョンがチェックされます。 参加メンバーがそのバージョンをサポートしている場合、メンバーが追加の通信機能をサポートしていても、参加メンバーはグループに参加し、グループが発表した通信プロトコルを使用します。 参加メンバーが通信プロトコルバージョンをサポートしていない場合は、グループから削除されます。
2 つのメンバーが同じメンバーシップ変更イベントに参加しようとすると、両方のメンバーの通信プロトコルバージョンがすでにグループ通信プロトコルバージョンと互換性がある場合にのみ参加できます。 グループとは異なる通信プロトコルバージョンを持つメンバーは、分離して参加する必要があります。 例:
一方の MySQL Server 8.0.16 インスタンスは、通信プロトコルバージョン 5.7.24 を使用するグループに正常に参加できます。
一方の MySQL Server 5.7.24 インスタンスは、通信プロトコルバージョン 8.0.16 を使用するグループに正常に参加できません。
2 つの MySQL Server 8.0.16 インスタンスは、通信プロトコルバージョン 5.7.24 を使用するグループに同時に参加することはできません。
2 つの MySQL Server 8.0.16 インスタンスは、通信プロトコルバージョン 8.0.16 を使用するグループに同時に参加できます。
グループがサポートしている最も古い MySQL Server バージョンを返す group_replication_get_communication_protocol()
UDF を使用して、グループが使用している通信プロトコルを検査できます。 グループの既存のすべてのメンバーは、同じ通信プロトコルバージョンを返します。 例:
SELECT group_replication_get_communication_protocol();
+------------------------------------------------+
| group_replication_get_communication_protocol() |
+------------------------------------------------+
| 8.0.16 |
+------------------------------------------------+
group_replication_get_communication_protocol()
UDF は、グループがサポートする MySQL の最小バージョンを返します。これは、group_replication_set_communication_protocol()
UDF に渡されたバージョン番号、および UDF を使用するメンバーにインストールされている MySQL Server バージョンとは異なる場合があります。
以前のリリースのメンバーが参加できるようにグループの通信プロトコルバージョンを変更する必要がある場合は、group_replication_set_communication_protocol()
UDF を使用して、許可する最も古いメンバーの MySQL Server バージョンを指定します。 これにより、可能であれば、グループは互換性のある通信プロトコルバージョンにフォールバックされます。 この UDF を使用するには GROUP_REPLICATION_ADMIN
権限が必要です。また、ステートメントを発行するときは、大部分を失うことなく、既存のすべてのグループメンバーがオンラインである必要があります。 例:
SELECT group_replication_set_communication_protocol("5.7.25");
レプリケーショングループのすべてのメンバーを新しい MySQL Server リリースにアップグレードしても、グループ通信プロトコルのバージョンは一致するように自動的にアップグレードされません。 以前のリリースでメンバーをサポートする必要がなくなった場合は、group_replication_set_communication_protocol()
UDF を使用して、通信プロトコルバージョンを、メンバーをアップグレードした新しい MySQL Server バージョンに設定できます。 例:
SELECT group_replication_set_communication_protocol("8.0.16");
group_replication_set_communication_protocol()
UDF はグループアクションとして実装されるため、グループのすべてのメンバーで同時に実行されます。 グループアクションはメッセージのバッファリングを開始し、すでに進行中の送信メッセージの配信が完了するまで待機してから、通信プロトコルのバージョンを変更し、バッファされたメッセージを送信します。 通信プロトコルバージョンを変更した後、メンバーがいつでもグループに参加しようとすると、グループメンバーは新しいプロトコルバージョンを通知します。
MySQL InnoDB クラスタは、AdminAPI 操作を使用してクラスタトポロジが変更されるたびに、そのメンバーの通信プロトコルバージョンを自動的かつ透過的に管理します。 InnoDB クラスタでは、現在クラスタの一部であるか、クラスタに参加しているすべてのインスタンスでサポートされている最新の通信プロトコルバージョンが常に使用されます。 詳細は、InnoDB クラスタ およびグループのレプリケーションプロトコルを参照してください。