このセクションで説明する関数は、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() (導入 5.6.5) |
サブセット内のすべての GTID がセット内にもある場合は、true を返します。そうでない場合は、false を返します。 |
GTID_SUBTRACT() (導入 5.6.5) |
セット内の GTID のうち、サブセット内にないものをすべてを返します。 |
SQL_THREAD_WAIT_AFTER_GTIDS() (導入 5.6.5, 非推奨 5.6.9) |
廃止: WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() に置き換わりました |
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() (導入 5.6.9) |
指定された GTID がスレーブで実行されるまで待ちます。 |
-
2 セットのグローバルトランザクション ID
subset
とset
が指定された場合、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 で追加されました。
-
2 セットのグローバルトランザクション ID
subset
とset
が指定された場合、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_mode
がOFF
である場合は、常にNULL
を返します。(Bug #14640065)