Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


17.1.4.5 グローバルトランザクション ID のオプションと変数

GTID レプリケーションで使用される起動オプション

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

このセクションで説明した MySQL Server オプションおよびシステム変数は、MySQL 5.6.5 で導入されたグローバルトランザクション識別子 (GTID) のモニターと制御に使用されます。

注記

これらのオプションと変数の多くは、MySQL 5.6.9 で名前が変わりました。詳細については、このセクションの説明を参照してください。

追加情報については セクション17.1.3「グローバルトランザクション識別子を使用したレプリケーション」を参照してください。

GTID レプリケーションで使用される起動オプション

次のサーバー起動オプションは GTID ベースレプリケーションで使用されます。

  • --disable-gtid-unsafe-statements

    導入 5.6.5
    削除 5.6.9
    コマンド行形式 --disable-gtid-unsafe-statements[=value]
    システム変数 名前 disable_gtid_unsafe_statements
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト false

    廃止: MySQL 5.6.9 で --enforce-gtid-consistency に置き換わりました。(Bug #14775984)

  • --enforce-gtid-consistency

    導入 5.6.9
    コマンド行形式 --enforce-gtid-consistency[=value]
    システム変数 名前 enforce_gtid_consistency
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト false

    このオプションが有効のときは、トランザクションセーフな方法でログを記録できるステートメントのみの実行を許可することで、GTID 一貫性を適用します。--enforce-gtid-consistency を有効にしてから --gtid-modeON に設定する必要があります。そうしないで 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_dbmysql_upgrade などのプログラムで使用されることを意図しています。(Bug #14722659)

  • --gtid-mode

    導入 5.6.5
    コマンド行形式 --gtid-mode=MODE
    システム変数 名前 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-modeON に設定されているときに 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 レプリケーションで使用されるシステム変数

次のシステム変数は GTID ベースレプリケーションで使用されます。

  • disable_gtid_unsafe_statements

    導入 5.6.5
    削除 5.6.9
    コマンド行形式 --disable-gtid-unsafe-statements[=value]
    システム変数 名前 disable_gtid_unsafe_statements
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト false

    廃止: MySQL 5.6.9 で enforce_gtid_consistency に置き換わりました。(Bug #14775984)

  • gtid_done

    導入 5.6.5
    削除 5.6.9
    システム変数 名前 gtid_done
    変数スコープ グローバル、セッション
    動的変数 いいえ
    許可されている値 文字列

    廃止: MySQL 5.6.9 で gtid_executed に置き換わりました。(Bug #14775984)

  • enforce_gtid_consistency

    導入 5.6.9
    コマンド行形式 --enforce-gtid-consistency[=value]
    システム変数 名前 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)

  • gtid_executed

    導入 5.6.9
    システム変数 名前 gtid_executed
    変数スコープ グローバル、セッション
    動的変数 いいえ
    許可されている値 文字列

    この変数は、グローバルスコープで使用されるとき、バイナリログにログが記録されるすべてのトランザクションセットの表現を含みます。これは、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 と呼ばれていました。

  • gtid_lost

    導入 5.6.5
    削除 5.6.9
    システム変数 名前 gtid_lost
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 文字列

    廃止: MySQL 5.6.9 で gtid_purged に置き換わりました。(Bug #14775984)

  • gtid_mode

    導入 5.6.5
    システム変数 名前 gtid_mode
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 列挙
    デフォルト OFF
    有効な値 OFF
    UPGRADE_STEP_1
    UPGRADE_STEP_2
    ON

    GTID が有効かどうかを示します。読み取り専用。--gtid-mode を使用して設定します。

  • gtid_next

    導入 5.6.5
    システム変数 名前 gtid_next
    変数スコープ セッション
    動的変数 はい
    許可されている値 列挙
    デフォルト AUTOMATIC
    有効な値 AUTOMATIC
    ANONYMOUS
    UUID:NUMBER

    この変数は、次の GTID が取得されたかどうか、およびどのように取得されたかを指定するために使用されます。gtid_next は次の値のいずれかを取ることができます。

    • AUTOMATIC: 自動的に生成される次のグローバルトランザクション ID を使用します。

    • ANONYMOUS: トランザクションはグローバル識別子を持たず、ファイルと位置のみで識別されます。

    • UUID:NUMBER 形式のグローバルトランザクション ID。

    この変数を設定するには、SUPER 権限が必要です。gtid_modeOFF の場合、この変数を設定しても効果はありません。

    MySQL 5.6.20 より前は、GTID は有効でも gtid_nextAUTOMATIC でない場合、DROP TABLE は、非一時テーブルと一時テーブル、またはトランザクションストレージエンジンを使用する一時テーブルと非トランザクションストレージエンジンを使用する一時テーブルの組み合わせで使用されたときに、正しく機能しません。MySQL 5.6.20 以降では、DROP TABLE または DROP TEMPORARY TABLE は、テーブルのこれらの組み合わせのいずれかで使用されると明示的なエラーで失敗します。(Bug #17620053)

    MySQL 5.6.11 だけですが、gtid_nextAUTOMATIC 以外の値に設定されているとき、ステートメント CHANGE MASTER TOSTART SLAVESTOP SLAVEREPAIR TABLEOPTIMIZE TABLEANALYZE TABLECHECK TABLECREATE SERVERALTER SERVERDROP SERVERCACHE INDEXLOAD INDEX INTO CACHEFLUSH、または RESET を実行できません。このような場合、ステートメントはエラーで失敗します。このようなステートメントは、MySQL 5.6.12 以降では拒否されません。(Bug #16062608、Bug #16715809、Bug #69045)

  • gtid_owned

    導入 5.6.5
    システム変数 名前 gtid_owned
    変数スコープ グローバル、セッション
    動的変数 いいえ
    許可されている値 文字列

    この読み取り専用変数は、内容がそのスコープに依存するリストを保持します。セッションスコープで使用されるときは、リストはこのクライアントが所有するすべての GTID を保持します。グローバルスコープで使用されるときは、すべての GTID とその所有者のリストを保持します。

  • gtid_purged

    導入 5.6.9
    システム変数 名前 gtid_purged
    変数スコープ グローバル
    動的変数 はい
    許可されている値 文字列

    バイナリログからパージされたすべてのトランザクションのセット。

    サーバーが起動するときに、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

    導入 5.6.21
    非推奨 5.6.23
    コマンド行形式 --simplified-binlog-gtid-recovery
    システム変数 名前 simplified_binlog_gtid_recovery
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト FALSE

    このオプションは非推奨で、今後の MySQL リリースで削除される予定です。名前が変更された binlog_gtid_recovery_simplified を使用して、クラッシュ後に MySQL がバイナリログファイルをどのように反復するかを制御します。


User Comments
Sign Up Login You must be logged in to post a comment.