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


MySQL 5.6 リファレンスマニュアル  /  関数と演算子  /  グローバルトランザクション ID とともに使用される関数

12.16 グローバルトランザクション ID とともに使用される関数

このセクションで説明する関数は、GTID ベースのレプリケーション (MySQL 5.6.5 以降で使用可能) で使用されます。これらのすべての関数には、引数として 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.20 GTID 関数

名前 説明
GTID_SUBSET() サブセット内のすべての GTID がセット内にもある場合は、true を返します。そうでない場合は、false を返します。
GTID_SUBTRACT() セット内の GTID のうち、サブセット内にないものをすべてを返します。
SQL_THREAD_WAIT_AFTER_GTIDS() (deprecated 5.6.9) 廃止: WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() に置き換わりました
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() 指定された GTID がスレーブで実行されるまで待ちます。

  • GTID_SUBSET(subset,set)

    2 セットのグローバルトランザクション ID subsetset が指定された場合、subset 内のすべての GTID が set にも存在すれば true (1) を返します。それ以外の場合は、false (0) を返します。

    この関数で使用される 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)

    この関数は、MySQL 5.6.5 で追加されました。

  • GTID_SUBTRACT(set,subset)

    2 セットのグローバルトランザクション ID subsetset が指定された場合、set 内の GTID で、subset に存在しないものだけを返します。

    この関数で使用される 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)

    この関数は、MySQL 5.6.5 で追加されました。

  • SQL_THREAD_WAIT_AFTER_GTIDS(gtid_set[, timeout])

    SQL_THREAD_WAIT_AFTER_GTIDS() は MySQL 5.6.5 で追加され、MySQL 5.6.9 で WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() に置き換えられました。(Bug #14775984)

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

  • WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(gtid_set[, timeout])

    スレーブ SQL スレッドで gtid_set 内にグローバルトランザクション ID が含まれるすべてのトランザクションが実行されるか (GTID セットの定義については、セクション17.1.3.1「GTID の概念」を参照してください)、timeout 秒が経過するかのどちらかが先に発生するまで待機します。timeout はオプションで、デフォルトのタイムアウトは 0 です。この場合、マスターは単に、GTID セット内のすべてのトランザクションが実行されるまで待機するだけです。

    MySQL 5.6.9 よりも前では、WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()SQL_THREAD_WAIT_AFTER_GTIDS() という名前でした。(Bug #14775984)

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

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

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

    戻り値は、実行されたトランザクションイベントの数です。MySQL 5.6.8 よりも前では、この関数は、タイムアウトが設定されていない場合は予想不可能な動作となり、GTID ベースのレプリケーションがアクティブでない場合でも呼び出されていました。MySQL 5.6.8 以降では、gtid_modeOFF である場合は、常に NULL を返します。(Bug #14640065)


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