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


MySQL 8.0 リファレンスマニュアル  /  関数と演算子  /  グローバルトランザクション識別子 (GTID) で使用される機能

12.19 グローバルトランザクション識別子 (GTID) で使用される機能

このセクションで説明する機能は GTID ベースのレプリケーションで使用されます。 これらの関数はすべて GTID セットの文字列表現を引数として取ることに注意してください。 そのため、GTID セットと一緒に使用する場合は、常に引用符で囲む必要があります。 詳しくはGTID セットをご覧ください。

2 つの GTID セットの結合は、単にカンマを挿入して結合された文字列として表現されたものです。 言い換えると、ここで作成した関数と同様に、非常に単純な関数を定義すれば、GTID セットの結合を取得できます。

CREATE FUNCTION GTID_UNION(g1 TEXT, g2 TEXT)
    RETURNS TEXT DETERMINISTIC
    RETURN CONCAT(g1,',',g2);

GTID の詳細およびこれらの GTID 関数を実際に使用する方法については、セクション17.1.3「グローバルトランザクション識別子を使用したレプリケーション」を参照してください。

表 12.24 「GTID 関数」

名前 説明 非推奨
GTID_SUBSET() サブセット内のすべての GTID がセット内にもある場合は、true を返します。そうでない場合は、false を返します。
GTID_SUBTRACT() セット内の GTID のうち、サブセット内にないものをすべてを返します。
WAIT_FOR_EXECUTED_GTID_SET() 指定された GTID がレプリカで実行されるまで待機します。
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() WAIT_FOR_EXECUTED_GTID_SET() の使用。 8.0.18

  • GTID_SUBSET(set1,set2)

    グローバルトランザクション識別子 set1 および set2 の 2 つのセットが指定されている場合、set1 内のすべての GTID も set2 内にあると true を返します。 それ以外の場合は、false を返します。

    この関数で使用される GTID セットは、次の例で示すように文字列で表現されます。

    mysql> SELECT GTID_SUBSET('3E11FA47-71CA-11E1-9E33-C80AA9429562:23',
        ->     '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57')\G
    *************************** 1. row ***************************
    GTID_SUBSET('3E11FA47-71CA-11E1-9E33-C80AA9429562:23',
        '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57'): 1
    1 row in set (0.00 sec)
    
    mysql> SELECT GTID_SUBSET('3E11FA47-71CA-11E1-9E33-C80AA9429562:23-25',
        ->     '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57')\G
    *************************** 1. row ***************************
    GTID_SUBSET('3E11FA47-71CA-11E1-9E33-C80AA9429562:23-25',
        '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57'): 1
    1 row in set (0.00 sec)
    
    mysql> SELECT GTID_SUBSET('3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25',
        ->     '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57')\G
    *************************** 1. row ***************************
    GTID_SUBSET('3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25',
        '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57'): 0
    1 row in set (0.00 sec)
  • GTID_SUBTRACT(set1,set2)

    グローバルトランザクション識別子 set1 および set2 の 2 つのセットがある場合、set2 にない GTID のみを set1 から返します。

    この関数で使用される GTID セットはすべて文字列で表現されるため、次の例で示すように引用符で囲む必要があります。

    mysql> SELECT GTID_SUBTRACT('3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57',
        ->     '3E11FA47-71CA-11E1-9E33-C80AA9429562:21')\G
    *************************** 1. row ***************************
    GTID_SUBTRACT('3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57',
        '3E11FA47-71CA-11E1-9E33-C80AA9429562:21'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:22-57
    1 row in set (0.00 sec)
    
    mysql> SELECT GTID_SUBTRACT('3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57',
        ->     '3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25')\G
    *************************** 1. row ***************************
    GTID_SUBTRACT('3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57',
        '3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:26-57
    1 row in set (0.00 sec)
    
    mysql> SELECT GTID_SUBTRACT('3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57',
        ->     '3E11FA47-71CA-11E1-9E33-C80AA9429562:23-24')\G
    *************************** 1. row ***************************
    GTID_SUBTRACT('3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57',
        '3E11FA47-71CA-11E1-9E33-C80AA9429562:23-24'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:21-22:25-57
    1 row in set (0.01 sec)
  • WAIT_FOR_EXECUTED_GTID_SET(gtid_set[, timeout])

    サーバーが、グローバルトランザクション識別子が gtid_set に含まれているすべてのトランザクションを適用する (つまり、GTID_SUBSET(gtid_subset, @@GLOBAL.gtid_executed) が保持する) まで待機します。 GTID セットの定義については、セクション17.1.3.1「GTID 形式および格納」 を参照してください。

    タイムアウトが指定され、GTID セット内のすべてのトランザクションが適用されるまで timeout 秒が経過すると、関数は待機を停止します。timeout はオプションで、デフォルトのタイムアウトは 0 秒です。この場合、GTID セット内のすべてのトランザクションが適用されるまで、関数は常に待機します。

    WAIT_FOR_EXECUTED_GTID_SET() は、すべてのレプリケーションチャネルおよびユーザークライアントから到着したトランザクションを含め、サーバーに適用されている GTID をすべて監視します。 レプリケーションチャネルが起動しているか停止しているかは考慮されません。

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

    この関数で使用される GTID セットは、次の例で示すように文字列で表現されるため、引用符で囲む必要があります。

    mysql> SELECT WAIT_FOR_EXECUTED_GTID_SET('3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5');
            -> 0

    GTID セットの構文の説明については、セクション17.1.3.1「GTID 形式および格納」 を参照してください。

    WAIT_FOR_EXECUTED_GTID_SET() の場合、戻り値はクエリーの状態です。0 は成功を表し、1 はタイムアウトを表します。 その他の障害では、エラーが生成されます。

    GTID が適用されるのを待機するためにクライアントがこの機能を使用している間は、gtid_mode を OFF に変更できません。

  • WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(gtid_set[, timeout][,channel])

    WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() は非推奨です。 かわりに WAIT_FOR_EXECUTED_GTID_SET() を使用してください。これは、指定したトランザクションがサーバーに到着するレプリケーションチャネルまたはユーザークライアントに関係なく機能します。


関連キーワード:  関数, GTID, FA, CA, セット, トランザクション, row, 空間, WAIT, 機能