このセクションで説明した MySQL Server オプションおよびシステム変数は、MySQL 5.6.5 で導入されたグローバルトランザクション識別子 (GTID) のモニターと制御に使用されます。
これらのオプションと変数の多くは、MySQL 5.6.9 で名前が変わりました。詳細については、このセクションの説明を参照してください。
追加情報については セクション17.1.3「グローバルトランザクション識別子を使用したレプリケーション」を参照してください。
次のサーバー起動オプションは GTID ベースレプリケーションで使用されます。
-
--disable-gtid-unsafe-statements
コマンド行形式 --disable-gtid-unsafe-statements[=value]
導入 5.6.5 削除 5.6.9 システム変数 disable_gtid_unsafe_statements
スコープ グローバル 動的 いいえ 型 ブール デフォルト false
廃止: MySQL 5.6.9 で
--enforce-gtid-consistency
に置き換わりました。(Bug #14775984) -
コマンド行形式 --enforce-gtid-consistency[=value]
導入 5.6.9 システム変数 enforce_gtid_consistency
スコープ グローバル 動的 いいえ 型 ブール デフォルト false
このオプションが有効のときは、トランザクションセーフな方法でログを記録できるステートメントのみの実行を許可することで、GTID 一貫性を適用します。
--enforce-gtid-consistency
を有効にしてから--gtid-mode
をON
に設定する必要があります。そうしないで GTID モードを有効にすると、エラーで失敗します。システムが GTID を使用する準備ができているかどうかをテストするために、--gtid-mode
を使用する前にこのオプションを使用できます (使用することをお勧めします)。--enforce-gtid-consistency
が有効のときは、トランザクションセーフなステートメントのみのログを記録できるため、次に示す操作はこのオプションで使用できないことになります。CREATE TABLE ... SELECT
ステートメントトランザクション内の
CREATE TEMPORARY TABLE
ステートメントトランザクションおよび非トランザクションテーブルの両方を更新するトランザクションまたはステートメント。
MySQL 5.6.9 より前では、このオプションの名前は
--disable-gtid-unsafe-statements
でした。(Bug #14775984)MySQL 5.6.7 より前では、このオプションを使用することで、一時テーブルでの非トランザクション DML が失敗しました (行ベースバイナリロギングを使用するときに一時テーブルへの変更のログが記録されない)。MySQL 5.6.7 以降では、影響されるすべてのテーブルが一時テーブルであるかぎり、
--disable-gtid-unsafe-statements
(MySQL 5.6.9 以降では--enforce-gtid-consistency
) の状態で非トランザクション DML ステートメントが一時テーブルで許可されます (Bug #14272672)。MySQL 5.6.7 より前では、
--write-binlog
が明示的に無効の状態で mysql_upgrade が実行されていないかぎり、mysql_upgrade をこのオプションが有効の状態で動作する MySQL Server で使用できませんでした。(Bug #13833710、Bug #14221043) MySQL 5.6.7 以降では、--gtid-mode=ON
の状態のサーバー上で mysql_upgrade を実行できますが、推奨されていません。MySQL システムテーブルが、非トランザクションであるMyISAM
ストレージエンジンを使用するためです。MySQL 5.6.8 以前では、
--enforce-gtid-consistency
が使用されるとき (このオプションは--disable-gtid-unsafe-statements
と呼ばれていました) に、非トランザクションテーブルに影響するステートメントを使用できませんでした。MySQL 5.6.9 以降では、このオプションは非トランザクションテーブルを更新する単一ステートメントを許可します。これは主に、mysql_install_db や mysql_upgrade などのプログラムで使用されることを意図しています。(Bug #14722659) -
コマンド行形式 --gtid-mode=MODE
導入 5.6.5 システム変数 gtid_mode
スコープ グローバル 動的 いいえ 型 列挙 デフォルト OFF
有効な値 OFF
UPGRADE_STEP_1
UPGRADE_STEP_2
ON
このオプションは GTID が有効であるかどうかを指定します。
--gtid-mode=ON
でサーバーを起動するには、サーバーも--log-bin
、--log-slave-updates
、および--enforce-gtid-consistency
オプションで起動される必要があります。このオプションを、バイナリログまたはリレーログ内に GTID があるときに
OFF
に、または実行すべき無名トランザクションが残っているときにON
に設定すると、エラーになります。重要このオプションはブール値を採用しません。つまり、値は列挙されます。このオプションを設定するときに数値の使用を試みないでください。予期しない結果になることがあります。値
UPGRADE_STEP_1
およびUPGRADE_STEP_2
は今後の使用のために予約されていますが、現在のところ本番環境ではサポートされていません。これら 2 つの値のいずれかを--gtid-mode
で使用する場合、サーバーは起動を拒否します。MySQL 5.6.7 より前では、
--write-binlog
が明示的に無効の状態で mysql_upgrade が実行されていないかぎり、mysql_upgrade をこのオプションが有効の状態で動作する MySQL Server で使用できませんでした。(Bug #13833710、Bug #14221043) MySQL 5.6.7 以降では、--gtid-mode=ON
の状態のサーバー上で mysql_upgrade を実行できますが、推奨されていません。非トランザクションであるMyISAM
ストレージエンジンを使用する MySQL システムテーブルに変更を加える可能性があるためです。MySQL 5.6.10 より前では、
--gtid-mode
がON
に設定されているときにsql_slave_skip_counter
変数のグローバル値を 1 に設定しても、効果はありませんでした。(Bug #15833516) MySQL 5.6.9 以前のバージョンでの回避策は、CHANGE MASTER TO ... MASTER_LOG_FILE = ... MASTER_LOG_POS = ...
を使用して (必要に応じてこのステートメントにMASTER_AUTO_POSITION = 0
オプションを含めて)、スレーブの位置をリセットすることです。
次のシステム変数は GTID ベースレプリケーションで使用されます。
-
disable_gtid_unsafe_statements
コマンド行形式 --disable-gtid-unsafe-statements[=value]
導入 5.6.5 削除 5.6.9 システム変数 disable_gtid_unsafe_statements
スコープ グローバル 動的 いいえ 型 ブール デフォルト false
廃止: MySQL 5.6.9 で
enforce_gtid_consistency
に置き換わりました。(Bug #14775984) -
導入 5.6.5 削除 5.6.9 システム変数 gtid_done
スコープ グローバル、セッション 動的 いいえ 型 文字列 Unit set of GTIDs
廃止: MySQL 5.6.9 で
gtid_executed
に置き換わりました。(Bug #14775984) -
コマンド行形式 --enforce-gtid-consistency[=value]
導入 5.6.9 システム変数 enforce_gtid_consistency
スコープ グローバル 動的 いいえ 型 ブール デフォルト false
この変数が true のときは、トランザクションセーフな方法でログを記録できるステートメントのみの実行を許可することで、サーバーは GTID 一貫性を適用します。サーバーを
--gtid-mode=ON
で起動する前に、GTID 一貫性を有効にする (--enforce-gtid-consistency
を使用することで) 必要があります。そうしないで GTID モードを有効にすると、エラーで失敗します。システムが GTID を使用する準備ができているかどうかをテストするために、--gtid-mode
を使用する前に GTID 一貫性を有効にできます (お勧めします)。enforce_gtid_consistency
が true のときは、トランザクションセーフなステートメントのみのログを記録できるため、次に示す操作はこの場合には使用できないことになります。CREATE TABLE ... SELECT
ステートメントトランザクション内の
CREATE TEMPORARY TABLE
ステートメントトランザクションおよび非トランザクションテーブルの両方を更新するトランザクションまたはステートメント。
この変数は読み取り専用です。これを設定するには、MySQL Server の起動時にコマンド行またはオプションファイルで
--enforce-gtid-consistency
オプションを使用してください。MySQL 5.6.9 より前では、この変数の名前は
disable_gtid_unsafe_statements
でした。(Bug #14775984) -
導入 5.6.9 システム変数 gtid_executed
スコープ グローバル、セッション 動的 いいえ 型 文字列 Unit set of GTIDs
この変数は、グローバルスコープで使用されるとき、バイナリログにログが記録されるすべてのトランザクションセットの表現を含みます。これは、
SHOW MASTER STATUS
およびSHOW SLAVE STATUS
の出力内のExecuted_Gtid_Set
カラムの値と同じです。この変数は、セッションスコープで使用されるとき、現在のセッションのキャッシュに書き込まれるすべてのトランザクションセットの表現を含みます。
任意の時点のバイナリログで見つかるトランザクションのセットは、
GTID_SUBTRACT(@@GLOBAL.gtid_executed, @@GLOBAL.gtid_purged)
に等しいです (つまり、バイナリログ内で、まだパージされていないすべてのトランザクション)。サーバーが起動すると、
@@GLOBAL.gtid_executed
は次の 2 つのセットの和集合に初期化されます。一番新しいバイナリログの
Previous_gtids_log_event
にリストされる GTID一番新しいバイナリログ内のすべての
Gtid_log_event
で見つかる GTID
これ以降、トランザクションが実行されるときに GTID がそのセットに追加されます。
RESET MASTER
を発行することで、この変数のグローバル値 (ただし、セッション値ではない) は空の文字列にリセットされます。GTID は、セットがRESET MASTER
によってクリアされるときを除いてセットから削除されません。セットは、サーバーがシャットダウンされてすべてのバイナリログが削除される場合にもクリアされます。MySQL 5.6.9 より前では、この変数は
gtid_done
と呼ばれていました。 -
導入 5.6.5 削除 5.6.9 システム変数 gtid_lost
スコープ グローバル 動的 いいえ 型 文字列 Unit set of GTIDs
廃止: MySQL 5.6.9 で
gtid_purged
に置き換わりました。(Bug #14775984) -
導入 5.6.5 システム変数 gtid_mode
スコープ グローバル 動的 いいえ 型 列挙 デフォルト OFF
有効な値 OFF
UPGRADE_STEP_1
UPGRADE_STEP_2
ON
GTID が有効かどうかを示します。読み取り専用。
--gtid-mode
を使用して設定します。 -
導入 5.6.5 システム変数 gtid_next
スコープ セッション 動的 はい 型 列挙 デフォルト AUTOMATIC
有効な値 AUTOMATIC
ANONYMOUS
UUID:NUMBER
この変数は、次の GTID が取得されたかどうか、およびどのように取得されたかを指定するために使用されます。
gtid_next
は次の値のいずれかを取ることができます。AUTOMATIC
: 自動的に生成される次のグローバルトランザクション ID を使用します。ANONYMOUS
: トランザクションはグローバル識別子を持たず、ファイルと位置のみで識別されます。UUID
:NUMBER
形式のグローバルトランザクション ID。
この変数を設定するには、
SUPER
権限が必要です。gtid_mode
がOFF
の場合、この変数を設定しても効果はありません。MySQL 5.6.20 より前は、GTID は有効でも
gtid_next
がAUTOMATIC
でない場合、DROP TABLE
は、非一時テーブルと一時テーブル、またはトランザクションストレージエンジンを使用する一時テーブルと非トランザクションストレージエンジンを使用する一時テーブルの組み合わせで使用されたときに、正しく機能しません。MySQL 5.6.20 以降では、DROP TABLE
またはDROP TEMPORARY TABLE
は、テーブルのこれらの組み合わせのいずれかで使用されると明示的なエラーで失敗します。(Bug #17620053)MySQL 5.6.11 だけですが、
gtid_next
がAUTOMATIC
以外の値に設定されているとき、ステートメントCHANGE MASTER TO
、START SLAVE
、STOP SLAVE
、REPAIR TABLE
、OPTIMIZE TABLE
、ANALYZE TABLE
、CHECK TABLE
、CREATE SERVER
、ALTER SERVER
、DROP SERVER
、CACHE INDEX
、LOAD INDEX INTO CACHE
、FLUSH
、またはRESET
を実行できません。このような場合、ステートメントはエラーで失敗します。このようなステートメントは、MySQL 5.6.12 以降では拒否されません。(Bug #16062608、Bug #16715809、Bug #69045) -
導入 5.6.5 システム変数 gtid_owned
スコープ グローバル、セッション 動的 いいえ 型 文字列 Unit set of GTIDs
この読み取り専用変数は、内容がそのスコープに依存するリストを保持します。セッションスコープで使用されるときは、リストはこのクライアントが所有するすべての GTID を保持します。グローバルスコープで使用されるときは、すべての GTID とその所有者のリストを保持します。
-
導入 5.6.9 システム変数 gtid_purged
スコープ グローバル 動的 はい 型 文字列 Unit set of GTIDs
バイナリログからパージされたすべてのトランザクションのセット。
サーバーが起動するときに、
gtid_purged
のグローバル値は、一番古いバイナリログのPrevious_gtid_log_event
に含まれる GTID のセットに初期化されます。バイナリログがパージされると、一番古いものになったバイナリログから@@GLOBAL.gtid_purged
が再度読み取られます。RESET MASTER
を発行することで、この変数の値は空の文字列にリセットされます。MySQL 5.6.9 より前では、この変数は
gtid_lost
と呼ばれ、読み取り専用でした。MySQL 5.6.9 以降では、この変数の値を更新できます (ただし、すでにリストされたものに GTID を追加することでのみ、およびgtid_executed
が設定解除されたとき、つまり新しいサーバー上でのみ)。(Bug #14797808) -
simplified_binlog_gtid_recovery
コマンド行形式 --simplified-binlog-gtid-recovery
導入 5.6.21 非推奨 5.6.23 システム変数 simplified_binlog_gtid_recovery
スコープ グローバル 動的 いいえ 型 ブール デフォルト FALSE
このオプションは非推奨で、今後の MySQL リリースで削除される予定です。名前が変更された
binlog_gtid_recovery_simplified
を使用して、クラッシュ後に MySQL がバイナリログファイルをどのように反復するかを制御します。