# 12.19 与全局事务标识符 (GTID) 一起使用的函数
本节中描述的函数用于基于 GTID 的复制。重要的是要记住,所有这些函数都将 GTID 集的字符串表示形式作为参数。因此,GTID 集在与它们一起使用时必须始终被引用。看GTID 集了解更多信息。
两个 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;否则为假。 | |
GTID_SUBTRACT() | 返回集合中所有不在子集中的 GTID。 | |
WAIT_FOR_EXECUTED_GTID_SET() | 等到给定的 GTID 已在副本上执行。 | |
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() | 采用WAIT_FOR_EXECUTED_GTID_SET() . | 8.0.18 |
-
给定两组全局事务标识符*
设置1
和设置2
, 如果所有 GTID 在设置1
也在设置2
*.否则返回 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)
-
给定两组全局事务标识符*
设置1
和设置2
, 只返回那些 GTID设置1
不在设置2
*.与此函数一起使用的所有 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*[, *
暂停*])
等到服务器应用了全局事务标识符包含在其中的所有事务*
gtid_set
;也就是说,直到条件 GTID_子集(gtid_subset
*,@@GLOBAL.gtid_executed
) 成立。看第 17.1.3.1 节,“GTID 格式和存储”用于 GTID 集的定义。如果指定了超时,并且*
暂停
在应用 GTID 集中的所有事务之前的秒数,函数停止等待。暂停
*是可选的,默认超时为 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_mode
当任何客户端使用此功能等待应用 GTID 时,不能将其更改为 OFF。 -
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(*
gtid_set*[, *
暂停*][,*
渠道*])
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()
已弃用。采用WAIT_FOR_EXECUTED_GTID_SET()
相反,无论指定事务通过哪个复制通道或用户客户端到达服务器,它都可以工作。