このページは機械翻訳したものです。
このセクションでは、レプリケーションソースサーバーで使用できるサーバーオプションおよびシステム変数について説明します。 オプションはコマンド行またはオプションファイルで指定できます。 システム変数値はSET を使用して指定できます。
ソースおよび各レプリカで、server_id システム変数を設定して一意のレプリケーション ID を確立する必要があります。 サーバーごとに、1 から 2 32− 1 の範囲の一意の正の整数を選択する必要があり、各 ID はレプリケーショントポロジ内の他のソースまたはレプリカで使用されている他のすべての ID と異なる必要があります。 例: server-id=3。
バイナリロギングを制御するためにソースで使用されるオプションについては、セクション17.1.6.4「バイナリロギングのオプションと変数」 を参照してください。
次のリストでは、レプリケーションソースサーバーを制御するための起動オプションについて説明します。 レプリケーションに関連するシステム変数はこのセクションの後半で説明します。
次のシステム変数は、レプリケーションソースサーバーに対して、またはレプリケーションソースサーバーによって使用されます:
-
コマンド行形式 --auto-increment-increment=#システム変数 auto_increment_incrementスコープ グローバル、セッション 動的 はい SET_VARヒントの適用はい 型 Integer デフォルト値 1最小値 1最大値 65535auto_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_incrementはNDBテーブルで使用する場合にもサポートされます。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_offsetはAUTO_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_incrementとauto_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スコープ グローバル、セッション 動的 はい SET_VARヒントの適用はい 型 Integer デフォルト値 1最小値 1最大値 65535この変数のデフォルト値は 1 です。 デフォルト値のままにしておくと、グループレプリケーションがマルチプライマリモードでサーバーで起動され、サーバー ID に変更されます。 詳細については、
auto_increment_incrementの説明を参照してください。注記auto_increment_offsetはNDBテーブルで使用する場合にもサポートされます。MySQL 8.0.18 では、このシステム変数のセッション値の設定は制限付き操作ではなくなりました。
-
導入 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「システム変数権限」 を参照) が必要です。 ただし、この変数はユーザーが設定するためのものではなく、レプリケーションインフラストラクチャによって自動的に設定されることに注意してください。 -
導入 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[={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スコープ グローバル 動的 はい 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_countは1です。つまり、準同期レプリケーションは、単一のレプリカ確認応答を受信した後に続行されます。 パフォーマンスは、この変数の小さい値に最適です。たとえば、
rpl_semi_sync_master_wait_for_slave_countが2の場合、準同期レプリケーションを続行するには、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_SYNCAFTER_COMMITこの変数は、準同期レプリケーションソースサーバーがトランザクションをコミットしたクライアントにステータスを返す前に、トランザクション受信のレプリカ確認を待機するポイントを制御します。 次の値を使用できます:
AFTER_SYNC(デフォルト): ソースは、各トランザクションをバイナリログとレプリカに書き込み、バイナリログをディスクに同期します。 ソースは、同期後にトランザクション受信のレプリカ確認を待機します。 確認応答を受信すると、ソースはトランザクションをストレージエンジンにコミットし、クライアントに結果を返してから続行できます。AFTER_COMMIT: ソースは、各トランザクションをバイナリログとレプリカに書き込み、バイナリログを同期し、トランザクションをストレージエンジンにコミットします。 ソースは、コミット後にトランザクション受信のレプリカ確認を待機します。 確認を受信すると、ソースは結果をクライアントに返し、クライアントは続行できます。
これらの設定のレプリケーション特性は、次のように異なります:
-
AFTER_SYNCでは、すべてのクライアントに同時にコミットされたトランザクションが表示されます: レプリカによって確認され、ソース上のストレージエンジンにコミットされたあと。 したがって、すべてのクライアントにソース上の同じデータが表示されます。ソース障害が発生した場合、ソースでコミットされたすべてのトランザクションがレプリカにレプリケートされます (リレーログに保存されます)。 レプリカが最新であるため、ソースサーバーの予期しない終了およびレプリカへのフェイルオーバーは失われません。 ただし、バイナリログリカバリ後に外部化された場合にレプリカとの競合を引き起こすコミットされていないトランザクションがバイナリログに含まれる可能性があるため、このシナリオではソースを再起動できず、破棄する必要があることに注意してください。
-
AFTER_COMMITでは、サーバーがストレージエンジンにコミットしてレプリカの確認応答を受信したあとにのみ、トランザクションを発行するクライアントは戻りステータスを取得します。 コミット後およびレプリカの確認前に、他のクライアントはコミット中のクライアントの前にコミット済トランザクションを確認できます。レプリカがトランザクションを処理しないなどの問題が発生した場合は、予期しないソースサーバーが終了してレプリカにフェイルオーバーしたときに、そのようなクライアントがソースで見た内容と比較してデータが失われる可能性があります。
この変数は、ソース側の準同期レプリケーションプラグインがインストールされている場合にのみ使用できます。
MySQL 5.7 での
rpl_semi_sync_master_wait_pointの追加により、準同期インタフェースバージョンが増分されるため、バージョン互換性制約が作成されました: MySQL 5.7 以上のサーバーは、旧バージョンの準同期レプリケーションプラグインでは動作しません。また、旧バージョンのサーバーは、MySQL 5.7 以上の準同期レプリケーションプラグインでは動作しません。