このセクションでは、グループが実行されているモード (単一プライマリまたはマルチプライマリ) を変更する方法について説明します。 グループモードの変更に使用される関数は、任意のメンバーで実行できます。
group_replication_switch_to_single_primary_mode()
UDF を使用して、マルチプライマリモードで実行されているグループをシングルプライマリモードに変更するには、次を発行します:
SELECT group_replication_switch_to_single_primary_mode()
シングルプライマリモードに変更すると、シングルプライマリモード (group_replication_enforce_update_everywhere_checks=OFF
) での必要に応じて、すべてのグループメンバーで厳密な整合性チェックも無効になります。
文字列が渡されない場合、結果の単一プライマリグループでの新しいプライマリの選択は、セクション18.1.3.1「シングルプライマリモード」 で説明されている選択ポリシーに従います。 選択プロセスを上書きし、マルチプライマリグループの特定のメンバーをプロセスの新しいプライマリとして構成するには、メンバーの server_uuid
を取得して group_replication_switch_to_single_primary_mode()
に渡します。 たとえば、次のコマンドを発行します:
SELECT group_replication_switch_to_single_primary_mode(member_uuid);
8.0.17 から MySQL Server バージョンを実行しているメンバーで UDF を発行し、すべてのメンバーが MySQL Server バージョン 8.0.17 以上を実行している場合、パッチバージョンに基づいて、グループ内の最下位の MySQL Server バージョンを実行している新規プライマリメンバーのみを指定できます。 この保護策は、グループが新しい機能との互換性を維持するために適用されます。 新しいプライマリメンバーを指定しない場合、選択プロセスではグループメンバーのパッチバージョンが考慮されます。
いずれかのメンバーが MySQL 8.0.13 と MySQL 8.0.16 の間で MySQL Server バージョンを実行している場合、この保護策はグループに適用されず、新しいプライマリメンバーを指定できますが、グループ内で最も低い MySQL Server バージョンを実行しているプライマリを選択することをお薦めします。 新しいプライマリメンバーを指定しない場合、選択プロセスではグループメンバーのメジャーバージョンのみが考慮されます。
アクションの実行中に、次のコマンドを発行して進行状況を確認できます:
SELECT event_name, work_completed, work_estimated FROM performance_schema.events_stages_current WHERE event_name LIKE "%stage/group_rpl%";
+----------------------------------------------------------------------------+----------------+----------------+
| event_name | work_completed | work_estimated |
+----------------------------------------------------------------------------+----------------+----------------+
| stage/group_rpl/Primary Switch: waiting for pending transactions to finish | 4 | 20 |
+----------------------------------------------------------------------------+----------------+----------------+
group_replication_switch_to_multi_primary_mode()
UDF を使用して、単一プライマリモードで実行されているグループをマルチプライマリモードに変更するには、次のように発行します:
SELECT group_replication_switch_to_multi_primary_mode()
データの安全性と一貫性を確保するために調整されたグループ操作の後、グループに属するすべてのメンバーがプライマリになります。
シングルプライマリモードで実行されていたグループをマルチプライマリモードで実行するように変更すると、MySQL 8.0.17 以上を実行しているメンバーは、グループに存在する最低バージョンより上位の MySQL サーバーバージョンを実行している場合、自動的に読取り専用モードになります。 MySQL 8.0.16 以下を実行しているメンバーはこのチェックを実行せず、常に読取り/書込みモードになります。
アクションの実行中に、次のコマンドを発行して進行状況を確認できます:
SELECT event_name, work_completed, work_estimated FROM performance_schema.events_stages_current WHERE event_name LIKE "%stage/group_rpl%";
+----------------------------------------------------------------------+----------------+----------------+
| event_name | work_completed | work_estimated |
+----------------------------------------------------------------------+----------------+----------------+
| stage/group_rpl/Multi-primary Switch: applying buffered transactions | 0 | 1 |
+----------------------------------------------------------------------+----------------+----------------+