このセクションでは、MySQL 8.0 で GTID ベースレプリケーションを構成および起動するためのプロセスについて説明します。 これは、ソースサーバーを初めて起動するか、停止できることを前提とした「「コールドスタート」」プロシージャです。GTID を使用した実行中のソースサーバーからのレプリカのプロビジョニングの詳細は、セクション17.1.3.5「フェイルオーバーおよびスケールアウトでの GTID の使用」 を参照してください。 オンラインでの GTID モードの変更については、セクション17.1.4「オンラインサーバーでの GTID モードの変更」 を参照してください。
1 つのソースと 1 つのレプリカで構成される、最も単純な GTID レプリケーショントポロジのためのこの起動プロセスの主なステップは、次のとおりです:
レプリケーションがすでに動作している場合、両方のサーバーを読み取り専用にすることでそれらを同期します。
両方のサーバーを停止します。
-
GTID を有効にして両方のサーバーを再起動し、正しいオプションを構成します。
説明したサーバーを起動するために必要な mysqld オプションについては、このセクションの後半の例で説明します。
ソースをレプリケーションデータソースとして使用し、自動配置を使用するようレプリカに指示します。 この手順の実施に必要な SQL ステートメントは、このセクションの後半の例で説明します。
新しいバックアップを作成します。 GTID のないトランザクションを含むバイナリログは GTID が有効になっているサーバーでは使用できないため、この時点より前に作成されたバックアップは新しい構成では使用できません。
レプリカを起動し、両方のサーバーで読取り専用モードを無効にして、更新を受け入れることができるようにします。
次の例では、MySQL バイナリログの位置ベースのレプリケーションプロトコルを使用して、2 つのサーバーがすでにソースおよびレプリカとして実行されています。 新しいサーバーから開始する場合、レプリケーション接続用の特定のユーザーの追加の詳細は セクション17.1.2.3「レプリケーション用ユーザーの作成」 を、server_id
変数の設定の詳細は セクション17.1.2.1「レプリケーションソース構成の設定」 を参照してください。 次の例は、mysqld 起動オプションをサーバーオプションファイルに格納する方法を示しています。詳細は、セクション4.2.2.2「オプションファイルの使用」 を参照してください。 または、mysqld の実行時に起動オプションを使用することもできます。
後続のほとんどの手順では、SUPER
権限を持つ MySQL root
アカウントまたは別の MySQL ユーザーアカウントを使用する必要があります。mysqladmin shutdown
には、SUPER
権限または SHUTDOWN
権限が必要です。
手順 1: サーバーを同期します.
このステップは、GTID を使用せずにすでにレプリケートされているサーバーを操作する場合にのみ必要です。 新しいサーバーの場合は、ステップ 3 に進みます。 次のコマンドを発行して、各サーバーで read_only
システム変数を ON
に設定し、サーバーを読取り専用にします:
mysql> SET @@GLOBAL.read_only = ON;
進行中のすべてのトランザクションがコミットまたはロールバックされるまで待機します。 その後、レプリカがソースをキャッチアップできるようにします。 続行する前にレプリカがすべての更新を処理したことを確認することが非常に重要です .
ポイントインタイムのバックアップおよびリストアなど、レプリケーション以外にバイナリログを使用する場合は、GTID のないトランザクションを含む古いバイナリログが不要になるまで待機します。 理想的には、サーバーがすべてのバイナリログをパージし、既存のバックアップが期限切れになるまで待機します。
GTID が有効になっているサーバーでは GTID のないトランザクションを含むログを使用できないことを理解することが重要です。 続行する前に、GTID のないトランザクションがトポロジ内のどこにも存在しないことを確認する必要があります。
手順 2: 両方のサーバーを停止します。.
ここで示すように、mysqladmin を使用して各サーバーを停止します。ここで、username
はサーバーをシャットダウンするのに十分な権限を持つ MySQL ユーザーのユーザー名です。
shell> mysqladmin -uusername -p shutdown
次に、プロンプトにこのユーザーのパスワードを指定します。
ステップ 3: GTID が有効な両方のサーバーを起動.
GTID ベースのレプリケーションを有効にするには、GTID ベースのレプリケーションで安全なステートメントのみがログに記録されるように、gtid_mode
変数を ON
に設定し、enforce_gtid_consistency
変数を有効にして GTID モードで各サーバーを起動する必要があります。 例:
gtid_mode=ON
enforce-gtid-consistency=ON
また、レプリカ設定を構成する前に、--skip-slave-start
オプションを使用してレプリカを開始する必要があります。 GTID 関連のオプションおよび変数の詳細は、セクション17.1.6.5「グローバルトランザクション ID システム変数」 を参照してください。
mysql.gtid_executed テーブル の使用時に GTID を使用するためにバイナリロギングを有効にする必要はありません。 レプリケートを可能にするには、ソースサーバーで常にバイナリロギングが有効になっている必要があります。 ただし、複製サーバーは GTID を使用できますが、バイナリロギングは使用できません。 レプリカサーバーでバイナリロギングを無効にする必要がある場合は、レプリカの --skip-log-bin
および --log-slave-updates=OFF
オプションを指定して無効にできます。
ステップ 4: GTID ベースの自動配置を使用するようにレプリカを構成.
GTID ベースのトランザクションを含むソースをレプリケーションデータソースとして使用し、ファイルベースの配置ではなく GTID ベースの自動配置を使用するようにレプリカに指示します。 レプリカに対して (MySQL 8.0.23 の) CHANGE REPLICATION SOURCE TO
ステートメントまたは (MySQL 8.0.23 の前の)CHANGE MASTER TO
ステートメントを発行し、ステートメントに SOURCE_AUTO_POSITION
| MASTER_AUTO_POSITION
オプションを含めて、ソーストランザクションが GTID によって識別されることをレプリカに伝えます。
また、ソースホスト名とポート番号に適切な値を指定し、レプリカがソースに接続するために使用できるレプリケーションユーザーアカウントのユーザー名とパスワードを指定する必要がある場合もあります。これらがステップ 1 より前にすでに設定されており、それ以上変更する必要がない場合は、ここに示すステートメントから対応するオプションを安全に省略できます。
mysql> CHANGE MASTER TO
> MASTER_HOST = host,
> MASTER_PORT = port,
> MASTER_USER = user,
> MASTER_PASSWORD = password,
> MASTER_AUTO_POSITION = 1;
Or from MySQL 8.0.23:
mysql> CHANGE REPLICATION SOURCE TO
> SOURCE_HOST = host,
> SOURCE_PORT = port,
> SOURCE_USER = user,
> SOURCE_PASSWORD = password,
> SOURCE_AUTO_POSITION = 1;
ステップ 5: 新しいバックアップの作成. GTID を有効にする前に作成された既存のバックアップは、GTID を有効にしたこれらのサーバーでは使用できなくなりました。 この時点で新しいバックアップを作成して、使用可能なバックアップなしで残されないようにします。
たとえば、バックアップを作成しているサーバーで FLUSH LOGS
を実行できます。 次に、明示的にバックアップを取るか、設定した定期バックアップルーチンの次の反復を待機します。
ステップ 6: レプリカを起動し、読取り専用モードを無効にします. 次のようにレプリカを起動します:
mysql> START SLAVE;
Or from MySQL 8.0.22:
mysql> START REPLICA;
次のステップは、ステップ 1 でサーバーを読取り専用に構成した場合にのみ必要です。 サーバーが更新の受け入れを再度開始できるようにするには、次のステートメントを発行します:
mysql> SET @@GLOBAL.read_only = OFF;
GTID ベースのレプリケーションが実行され、以前と同様にソースでアクティビティを開始 (または再開) できます。セクション17.1.3.5「フェイルオーバーおよびスケールアウトでの GTID の使用」 では、GTID 使用時の新しいレプリカの作成について説明します。