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


17.1.6.2 レプリケーションソースのオプションと変数

このセクションでは、レプリケーションソースサーバーで使用できるサーバーオプションおよびシステム変数について説明します。 オプションはコマンド行またはオプションファイルで指定できます。 システム変数値はSET を使用して指定できます。

ソースおよび各レプリカで、server_id システム変数を設定して一意のレプリケーション ID を確立する必要があります。 サーバーごとに、1 から 2 32− 1 の範囲の一意の正の整数を選択する必要があり、各 ID はレプリケーショントポロジ内の他のソースまたはレプリカで使用されている他のすべての ID と異なる必要があります。 例: server-id=3

バイナリロギングを制御するためにソースで使用されるオプションについては、セクション17.1.6.4「バイナリロギングのオプションと変数」 を参照してください。

レプリケーションソースサーバーの起動オプション

次のリストでは、レプリケーションソースサーバーを制御するための起動オプションについて説明します。 レプリケーションに関連するシステム変数はこのセクションの後半で説明します。

  • --show-slave-auth-info

    コマンド行形式 --show-slave-auth-info[={OFF|ON}]
    Boolean
    デフォルト値 OFF

    --report-user および --report-password オプションを使用して開始されたレプリカのソース上の SHOW REPLICAS | SHOW SLAVE HOSTS の出力に、レプリケーションユーザー名とパスワードを表示します。

レプリケーションソースサーバーで使用されるシステム変数

次のシステム変数は、レプリケーションソースサーバーに対して、またはレプリケーションソースサーバーによって使用されます:

  • auto_increment_increment

    コマンド行形式 --auto-increment-increment=#
    システム変数 auto_increment_increment
    スコープ グローバル、セッション
    動的 はい
    SET_VAR ヒントの適用 はい
    Integer
    デフォルト値 1
    最小値 1
    最大値 65535

    auto_increment_increment および auto_increment_offset は、循環 (ソースからソース) レプリケーションでの使用を目的としており、AUTO_INCREMENT カラムの操作を制御するために使用できます。 両方の変数はグローバル値とセッション値を持ち、各値は 1 から 65,535 (1 と 65,535 を含みます) の間の整数値を取ることができます。 これらの 2 つの変数のいずれかの値を 0 に設定すると、代わりにその値は 1 に設定されます。 これらの 2 つの変数のいずれかの値を 65,535 より大きな整数または 0 より小さい整数に設定しようとすると、代わりにその値は 65,535 に設定されます。 auto_increment_increment または auto_increment_offset の値を整数でない値に設定しようとすると、エラーが発生し、変数の実際の値は変化しません。

    注記

    auto_increment_incrementNDB テーブルで使用する場合にもサポートされます。

    MySQL 8.0.18 では、このシステム変数のセッション値の設定は制限付き操作ではなくなりました。

    グループレプリケーションがサーバーで開始されると、auto_increment_increment の値は group_replication_auto_increment_increment の値に変更され (デフォルトは 7 )、auto_increment_offset の値はサーバー ID に変更されます。 グループレプリケーションが停止すると、変更は元に戻されます。 これらの変更は、auto_increment_increment および auto_increment_offset のそれぞれのデフォルト値が 1 の場合にのみ行われ、元に戻されます。 これらの値がすでにデフォルトから変更されている場合、Group Replication はそれらを変更しません。 MySQL 8.0 からは、グループレプリケーションが単一プライマリモードで、サーバー書込みが 1 つのみの場合も、システム変数は変更されません。

    auto_increment_increment および auto_increment_offset は、AUTO_INCREMENT のカラムの動作に次のように影響します:

    • auto_increment_increment は、連続するカラム値の間隔を制御します。 例:

      mysql> SHOW VARIABLES LIKE 'auto_inc%';
      +--------------------------+-------+
      | Variable_name            | Value |
      +--------------------------+-------+
      | auto_increment_increment | 1     |
      | auto_increment_offset    | 1     |
      +--------------------------+-------+
      2 rows in set (0.00 sec)
      
      mysql> CREATE TABLE autoinc1
          -> (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
        Query OK, 0 rows affected (0.04 sec)
      
      mysql> SET @@auto_increment_increment=10;
      Query OK, 0 rows affected (0.00 sec)
      
      mysql> SHOW VARIABLES LIKE 'auto_inc%';
      +--------------------------+-------+
      | Variable_name            | Value |
      +--------------------------+-------+
      | auto_increment_increment | 10    |
      | auto_increment_offset    | 1     |
      +--------------------------+-------+
      2 rows in set (0.01 sec)
      
      mysql> INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);
      Query OK, 4 rows affected (0.00 sec)
      Records: 4  Duplicates: 0  Warnings: 0
      
      mysql> SELECT col FROM autoinc1;
      +-----+
      | col |
      +-----+
      |   1 |
      |  11 |
      |  21 |
      |  31 |
      +-----+
      4 rows in set (0.00 sec)
    • auto_increment_offsetAUTO_INCREMENT カラム値の開始点を指定します。 次のことは、auto_increment_increment の記述で示した例のように、同じセッション中にこれらのステートメントが実行されるものと仮定しています。

      mysql> SET @@auto_increment_offset=5;
      Query OK, 0 rows affected (0.00 sec)
      
      mysql> SHOW VARIABLES LIKE 'auto_inc%';
      +--------------------------+-------+
      | Variable_name            | Value |
      +--------------------------+-------+
      | auto_increment_increment | 10    |
      | auto_increment_offset    | 5     |
      +--------------------------+-------+
      2 rows in set (0.00 sec)
      
      mysql> CREATE TABLE autoinc2
          -> (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
      Query OK, 0 rows affected (0.06 sec)
      
      mysql> INSERT INTO autoinc2 VALUES (NULL), (NULL), (NULL), (NULL);
      Query OK, 4 rows affected (0.00 sec)
      Records: 4  Duplicates: 0  Warnings: 0
      
      mysql> SELECT col FROM autoinc2;
      +-----+
      | col |
      +-----+
      |   5 |
      |  15 |
      |  25 |
      |  35 |
      +-----+
      4 rows in set (0.02 sec)

      auto_increment_offset の値が auto_increment_increment の値よりも大きいと、auto_increment_offset の値は無視されます。

    これらの変数のいずれかが変更されてから、AUTO_INCREMENT カラムを含むテーブルに新しい行が挿入される場合、結果は反直感的に見える場合があります。AUTO_INCREMENT 値のシリーズがカラムにすでに存在する値に関係なく計算され、挿入される次の値が AUTO_INCREMENT カラムに存在する最大値よりも大きなシリーズ内最小値であるためです。 シリーズは次のように計算されます。

    auto_increment_offset + N × auto_increment_increment

    ここで、N はシリーズ内正の整数値 [1, 2, 3, ...] です。 例:

    mysql> SHOW VARIABLES LIKE 'auto_inc%';
    +--------------------------+-------+
    | Variable_name            | Value |
    +--------------------------+-------+
    | auto_increment_increment | 10    |
    | auto_increment_offset    | 5     |
    +--------------------------+-------+
    2 rows in set (0.00 sec)
    
    mysql> SELECT col FROM autoinc1;
    +-----+
    | col |
    +-----+
    |   1 |
    |  11 |
    |  21 |
    |  31 |
    +-----+
    4 rows in set (0.00 sec)
    
    mysql> INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);
    Query OK, 4 rows affected (0.00 sec)
    Records: 4  Duplicates: 0  Warnings: 0
    
    mysql> SELECT col FROM autoinc1;
    +-----+
    | col |
    +-----+
    |   1 |
    |  11 |
    |  21 |
    |  31 |
    |  35 |
    |  45 |
    |  55 |
    |  65 |
    +-----+
    8 rows in set (0.00 sec)

    auto_increment_incrementauto_increment_offset に示される値は、シリーズ 5 + N × 10、つまり [5, 15, 25, 35, 45, ...] を生成します。 INSERT より前に col カラムに存在する最高値は 31、AUTO_INCREMENT シリーズ内で次に使用できる値は 35 なので、col に挿入される値はそのポイントで始まり、結果は SELECT クエリーで示されるようになります。

    これらの 2 つの変数の影響を単一テーブルに制限することはできません。これらの変数は MySQL サーバーのすべてのテーブルのすべての AUTO_INCREMENT カラムの動作を制御します。 どちらかの変数のグローバル値が設定されると、グローバル値が変更されるか、セッション値の設定によってオーバーライドされるまで、または mysqld が再起動されるまでその効果は持続します。 ローカル値が設定されると、新しい値は、セッションの期間に現在のユーザーが新しい行を挿入したすべてのテーブルの AUTO_INCREMENT カラムに影響します (そのセッション中にそれらの値が変更される場合を除く)。

    auto_increment_increment のデフォルト値は 1 です。 セクション17.5.1.1「レプリケーションと AUTO_INCREMENT」を参照してください。

  • auto_increment_offset

    コマンド行形式 --auto-increment-offset=#
    システム変数 auto_increment_offset
    スコープ グローバル、セッション
    動的 はい
    SET_VAR ヒントの適用 はい
    Integer
    デフォルト値 1
    最小値 1
    最大値 65535

    この変数のデフォルト値は 1 です。 デフォルト値のままにしておくと、グループレプリケーションがマルチプライマリモードでサーバーで起動され、サーバー ID に変更されます。 詳細については、auto_increment_increment の説明を参照してください。

    注記

    auto_increment_offsetNDB テーブルで使用する場合にもサポートされます。

    MySQL 8.0.18 では、このシステム変数のセッション値の設定は制限付き操作ではなくなりました。

  • immediate_server_version

    導入 8.0.14
    システム変数 immediate_server_version
    スコープ セッション
    動的 はい
    SET_VAR ヒントの適用 いいえ
    Integer

    レプリケーションによる内部使用用。 このセッションシステム変数は、レプリケーショントポロジ内の直接のソースであるサーバーの MySQL Server リリース番号 (MySQL 8.0.14 サーバーインスタンスの 80014 など) を保持します。 この即時サーバーがセッションシステム変数をサポートしていないリリースの場合、変数の値は 0 (UNKNOWN_SERVER_VERSION) に設定されます。

    変数の値は、ソースからレプリカにレプリケートされます。 この情報を使用すると、関係するリリース間で構文変更またはセマンティック変更が発生した場所を認識し、それらを適切に処理することで、レプリカは古いリリースのソースから発生したデータを正しく処理できます。 この情報は、レプリケーショングループの 1 つ以上のメンバーが他のメンバーより新しいリリースであるグループレプリケーション環境でも使用できます。 変数の値は、(Gtid_log_event または GTID がサーバーで使用されていない場合は Anonymous_gtid_log_event の一部として) 各トランザクションのバイナリログに表示でき、バージョン間レプリケーションの問題のデバッグに役立つことがあります。

    このシステム変数のセッション値の設定は制限された操作です。 セッションユーザーには、REPLICATION_APPLIER 権限 (セクション17.3.3「レプリケーション権限チェック」 を参照) または制限付きセッション変数の設定に十分な権限 (セクション5.1.9.1「システム変数権限」 を参照) が必要です。 ただし、この変数はユーザーが設定するためのものではなく、レプリケーションインフラストラクチャによって自動的に設定されることに注意してください。

  • original_server_version

    導入 8.0.14
    システム変数 original_server_version
    スコープ セッション
    動的 はい
    SET_VAR ヒントの適用 いいえ
    Integer

    レプリケーションによる内部使用用。 このセッションシステム変数は、トランザクションが最初にコミットされたサーバーの MySQL Server リリース番号 (MySQL 8.0.14 サーバーインスタンスの 80014 など) を保持します。 この元のサーバーがセッションシステム変数をサポートしていないリリースの場合、変数の値は 0 (UNKNOWN_SERVER_VERSION) に設定されます。 リリース番号が元のサーバーによって設定されている場合、レプリケーショントポロジ内の即時サーバーまたはその他の介在するサーバーがセッションシステム変数をサポートしていないため、その値をレプリケートしないと、変数の値は 0 にリセットされます。

    変数の値は、immediate_server_version システム変数と同じ方法で設定および使用されます。 変数の値が immediate_server_version システム変数の値と同じである場合、後者のみがバイナリログに記録され、元のサーバーのバージョンが同じであることが示されます。

    グループレプリケーション環境では、変更ログイベントを表示します。変更ログイベントは、新しいメンバーがグループに参加したときに各グループメンバーによってキューに入れられる特別なトランザクションであり、トランザクションをキューに入れるグループメンバーのサーバーバージョンでタグ付けされます。 これにより、元のドナーのサーバーバージョンが参加メンバーに認識されるようになります。 特定のビュー変更に対してキューに入れられたビュー変更ログイベントは、すべてのメンバーで同じ GTID を持つため、この場合のみ、同じ GTID のインスタンスの元のサーバーバージョンが異なる可能性があります。

    このシステム変数のセッション値の設定は制限された操作です。 セッションユーザーには、REPLICATION_APPLIER 権限 (セクション17.3.3「レプリケーション権限チェック」 を参照) または制限付きセッション変数の設定に十分な権限 (セクション5.1.9.1「システム変数権限」 を参照) が必要です。 ただし、この変数はユーザーが設定するためのものではなく、レプリケーションインフラストラクチャによって自動的に設定されることに注意してください。

  • rpl_semi_sync_master_enabled

    コマンド行形式 --rpl-semi-sync-master-enabled[={OFF|ON}]
    システム変数 rpl_semi_sync_master_enabled
    スコープ グローバル
    動的 はい
    SET_VAR ヒントの適用 いいえ
    Boolean
    デフォルト値 OFF

    ソースサーバーで準同期レプリケーションを有効にするかどうかを制御します。 プラグインを有効または無効にするには、この変数を ON または OFF (あるいは 1 または 0) にそれぞれ設定します。 デフォルトは OFF です。

    この変数は、ソース側の準同期レプリケーションプラグインがインストールされている場合にのみ使用できます。

  • rpl_semi_sync_master_timeout

    コマンド行形式 --rpl-semi-sync-master-timeout=#
    システム変数 rpl_semi_sync_master_timeout
    スコープ グローバル
    動的 はい
    SET_VAR ヒントの適用 いいえ
    Integer
    デフォルト値 10000

    ソースがタイムアウトして非同期レプリケーションに戻る前にレプリカからの確認応答をコミットで待機する時間を制御するミリ秒単位の値。 デフォルト値は 10000 (10 秒) です。

    この変数は、ソース側の準同期レプリケーションプラグインがインストールされている場合にのみ使用できます。

  • rpl_semi_sync_master_trace_level

    コマンド行形式 --rpl-semi-sync-master-trace-level=#
    システム変数 rpl_semi_sync_master_trace_level
    スコープ グローバル
    動的 はい
    SET_VAR ヒントの適用 いいえ
    Integer
    デフォルト値 32

    ソースサーバーの準同期レプリケーションのデバッグトレースレベル。 次の 4 つのレベルが定義されます:

    • 1 = 一般レベル (時間関数の失敗など)

    • 16 = 詳細レベル (詳細情報)

    • 32 = ネット待機レベル (ネットワーク待機についての詳細情報)

    • 64 = 関数レベル (関数の入口および出口についての情報)

    この変数は、ソース側の準同期レプリケーションプラグインがインストールされている場合にのみ使用できます。

  • rpl_semi_sync_master_wait_for_slave_count

    コマンド行形式 --rpl-semi-sync-master-wait-for-slave-count=#
    システム変数 rpl_semi_sync_master_wait_for_slave_count
    スコープ グローバル
    動的 はい
    SET_VAR ヒントの適用 いいえ
    Integer
    デフォルト値 1
    最小値 1
    最大値 65535

    続行する前にソースがトランザクションごとに受信する必要があるレプリカ確認の数。 デフォルトでは、rpl_semi_sync_master_wait_for_slave_count1 です。つまり、準同期レプリケーションは、単一のレプリカ確認応答を受信した後に続行されます。 パフォーマンスは、この変数の小さい値に最適です。

    たとえば、rpl_semi_sync_master_wait_for_slave_count2 の場合、準同期レプリケーションを続行するには、rpl_semi_sync_master_timeout によって構成されたタイムアウト期間の前に、2 つのレプリカがトランザクションの受信を確認する必要があります。 タイムアウト期間中にトランザクションの受信を確認するレプリカの数が少ない場合、ソースは通常のレプリケーションに戻ります。

    注記

    この動作は rpl_semi_sync_master_wait_no_slave にも依存

    この変数は、ソース側の準同期レプリケーションプラグインがインストールされている場合にのみ使用できます。

  • rpl_semi_sync_master_wait_no_slave

    コマンド行形式 --rpl-semi-sync-master-wait-no-slave[={OFF|ON}]
    システム変数 rpl_semi_sync_master_wait_no_slave
    スコープ グローバル
    動的 はい
    SET_VAR ヒントの適用 いいえ
    Boolean
    デフォルト値 ON

    レプリカ数がタイムアウト期間中に rpl_semi_sync_master_wait_for_slave_count によって構成されたレプリカの数を下回る場合でも、rpl_semi_sync_master_timeout によって構成されたタイムアウト期間が経過するまでソースが待機するかどうかを制御します。

    rpl_semi_sync_master_wait_no_slave の値が ON (デフォルト) の場合、レプリカ数はタイムアウト期間中に rpl_semi_sync_master_wait_for_slave_count 未満にドロップできます。 タイムアウト期間が経過する前に十分なレプリカがトランザクションを確認するかぎり、準同期レプリケーションは続行されます。

    rpl_semi_sync_master_wait_no_slave の値が OFF の場合、rpl_semi_sync_master_timeout で構成されたタイムアウト期間中に rpl_semi_sync_master_wait_for_slave_count で構成された数より少ない数にレプリカ数がドロップされると、ソースは通常のレプリケーションに戻ります。

    この変数は、ソース側の準同期レプリケーションプラグインがインストールされている場合にのみ使用できます。

  • rpl_semi_sync_master_wait_point

    コマンド行形式 --rpl-semi-sync-master-wait-point=value
    システム変数 rpl_semi_sync_master_wait_point
    スコープ グローバル
    動的 はい
    SET_VAR ヒントの適用 いいえ
    列挙
    デフォルト値 AFTER_SYNC
    有効な値

    AFTER_SYNC

    AFTER_COMMIT

    この変数は、準同期レプリケーションソースサーバーがトランザクションをコミットしたクライアントにステータスを返す前に、トランザクション受信のレプリカ確認を待機するポイントを制御します。 次の値を使用できます:

    • AFTER_SYNC (デフォルト): ソースは、各トランザクションをバイナリログとレプリカに書き込み、バイナリログをディスクに同期します。 ソースは、同期後にトランザクション受信のレプリカ確認を待機します。 確認応答を受信すると、ソースはトランザクションをストレージエンジンにコミットし、クライアントに結果を返してから続行できます。

    • AFTER_COMMIT: ソースは、各トランザクションをバイナリログとレプリカに書き込み、バイナリログを同期し、トランザクションをストレージエンジンにコミットします。 ソースは、コミット後にトランザクション受信のレプリカ確認を待機します。 確認を受信すると、ソースは結果をクライアントに返し、クライアントは続行できます。

    これらの設定のレプリケーション特性は、次のように異なります:

    • AFTER_SYNC では、すべてのクライアントに同時にコミットされたトランザクションが表示されます: レプリカによって確認され、ソース上のストレージエンジンにコミットされたあと。 したがって、すべてのクライアントにソース上の同じデータが表示されます。

      ソース障害が発生した場合、ソースでコミットされたすべてのトランザクションがレプリカにレプリケートされます (リレーログに保存されます)。 レプリカが最新であるため、ソースサーバーの予期しない終了およびレプリカへのフェイルオーバーは失われません。 ただし、バイナリログリカバリ後に外部化された場合にレプリカとの競合を引き起こすコミットされていないトランザクションがバイナリログに含まれる可能性があるため、このシナリオではソースを再起動できず、破棄する必要があることに注意してください。

    • AFTER_COMMIT では、サーバーがストレージエンジンにコミットしてレプリカの確認応答を受信したあとにのみ、トランザクションを発行するクライアントは戻りステータスを取得します。 コミット後およびレプリカの確認前に、他のクライアントはコミット中のクライアントの前にコミット済トランザクションを確認できます。

      レプリカがトランザクションを処理しないなどの問題が発生した場合は、予期しないソースサーバーが終了してレプリカにフェイルオーバーしたときに、そのようなクライアントがソースで見た内容と比較してデータが失われる可能性があります。

    この変数は、ソース側の準同期レプリケーションプラグインがインストールされている場合にのみ使用できます。

    MySQL 5.7 での rpl_semi_sync_master_wait_point の追加により、準同期インタフェースバージョンが増分されるため、バージョン互換性制約が作成されました: MySQL 5.7 以上のサーバーは、旧バージョンの準同期レプリケーションプラグインでは動作しません。また、旧バージョンのサーバーは、MySQL 5.7 以上の準同期レプリケーションプラグインでは動作しません。


関連キーワード:  変数, ソース, ncrement, サーバー, 設定, トランザクション, rpl, semi, master, increment