MySQL 8.0 リファレンスマニュアル


17.1.4.3 GTID トランザクションのオンラインでの無効化

このセクションでは、すでにオンラインになっているサーバーで GTID トランザクションを無効にする方法について説明します。 この手順では、サーバーをオフラインにする必要はなく、本番での使用に適しています。 ただし、GTID モードを無効にするときにサーバーをオフラインにする可能性がある場合は、そのプロセスが容易になります。

このプロセスは、サーバーがオンラインのときに GTID トランザクションを有効にする場合と似ていますが、手順は逆になります。 異なるのは、ログに記録されたトランザクションがレプリケートされるまで待機するポイントのみです。

起動する前に、サーバーが次の事前条件を満たしていることを確認します:

  • トポロジ内の All サーバーは、MySQL 5.7.6 以上を使用する必要があります。 トポロジ内の all サーバーがこのバージョンを使用していないかぎり、GTID トランザクションを単一のサーバーでオンラインで無効にすることはできません。

  • すべてのサーバーで、gtid_modeON に設定されています。

  • --replicate-same-server-id オプションがどのサーバーにも設定されていません。 このオプションが --log-slave-updates オプション (デフォルト) とともに設定され、バイナリロギングが有効 (デフォルト) である場合は、GTID トランザクションを無効にできません。 GTID を使用しない場合、このオプションの組み合わせによって循環レプリケーションで無限ループが発生します。

  1. 各レプリカで次を実行し、マルチソースレプリケーションを使用している場合は、チャネルごとに実行し、FOR CHANNEL チャネル句を含めます:

    STOP SLAVE [FOR CHANNEL 'channel'];
    CHANGE MASTER TO MASTER_AUTO_POSITION = 0, MASTER_LOG_FILE = file, \
    MASTER_LOG_POS = position [FOR CHANNEL 'channel'];
    START SLAVE [FOR CHANNEL 'channel'];
    
    Or from MySQL 8.0.22 / 8.0.23:
    STOP REPLICA [FOR CHANNEL 'channel'];
    CHANGE REPLICATION SOURCE TO SOURCE_AUTO_POSITION = 0, SOURCE_LOG_FILE = file, \
    SOURCE_LOG_POS = position [FOR CHANNEL 'channel'];
    START REPLICA [FOR CHANNEL 'channel'];
  2. 各サーバーで、次のコマンドを実行します:

    SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
  3. 各サーバーで、次のコマンドを実行します:

    SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
  4. 各サーバーで、変数@@GLOBAL.GTID_OWNED が空の文字列と等しくなるまで待機します。 これは、次を使用してチェックできます:

    SELECT @@GLOBAL.GTID_OWNED;

    レプリカでは、理論上、これが空になってから再度空でない可能性があります。 これは問題ではありません。一度空にすれば十分です。

  5. バイナリログに現在存在するすべてのトランザクションがすべてのレプリカにレプリケートされるのを待ちます。 すべての匿名トランザクションがすべてのサーバーにレプリケートされたことを確認する方法については、セクション17.1.4.4「匿名トランザクションのレプリケーションの検証」 を参照してください。

  6. レプリケーション以外にバイナリログを使用する場合 (たとえば、ポイントインタイムバックアップまたはリストアを実行する場合): GTID トランザクションを含む古いバイナリログが不要になるまで待ちます。

    たとえば、ステップ 5 の完了後、バックアップを作成しているサーバーで FLUSH LOGS を実行できます。 次に、明示的にバックアップを取るか、設定した定期バックアップルーチンの次の反復を待機します。

    理想的には、ステップ 5 の完了時に存在していたすべてのバイナリログがサーバーによってパージされるまで待機します。 また、ステップ 5 の前に作成したバックアップが期限切れになるまで待機します。

    重要

    これは、この手順で重要な点です。 GTID トランザクションを含むログを次のステップの後に使用できないことを理解することが重要です。 続行する前に、GTID トランザクションがトポロジ内のどこにも存在しないことを確認する必要があります。

  7. 各サーバーで、次のコマンドを実行します:

    SET @@GLOBAL.GTID_MODE = OFF;
  8. 各サーバーで、my.cnfgtid_mode=OFF を設定します。

    enforce_gtid_consistency=OFF を設定する場合は、ここで行うことができます。 設定後、enforce_gtid_consistency=OFF を構成ファイルに追加する必要があります。

以前のバージョンの MySQL にダウングレードする場合は、通常のダウングレード手順を使用してここでダウングレードできます。


関連キーワード:  GTID, サーバー, トランザクション, バイナリ, 設定, ソース, ベース, ログ, バックアップ, 構成