このセクションでは、レプリケーションソースサーバーで使用できるサーバーオプションおよびシステム変数について説明します。 オプションはコマンド行またはオプションファイルで指定できます。 システム変数値は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
最大値 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_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_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 以上の準同期レプリケーションプラグインでは動作しません。