本节描述的功能用于基于gtid的复制。重要的是要记住,所有这些函数都将GTID集的字符串表示形式作为参数。因此,GTID集在与它们一起使用时必须始终加引号。看到GTID集为更多的信息。
两个GTID集的并集仅仅是它们作为字符串的表示,用插入的逗号连接在一起。换句话说,你可以定义一个非常简单的函数来获取两个GTID集的并集,类似于这里创建的:
创建函数GTID_UNION(g1 TEXT, g2 TEXT)返回确定性的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 |
给定两组全局事务标识符
set1
而且关于我校
,如果所有gtid都在set1
也在关于我校
.否则返回false。此函数使用的GTID集被表示为字符串,如下例所示:
mysql >选择GTID_SUBSET (' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:23”,——> ' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33——c80aa9429562:21 - 57) \ G *************************** 1。行 *************************** GTID_SUBSET(“3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:23 ', ' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:21 - 57”):1 1行组(0.00秒)mysql >选择GTID_SUBSET (' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:23 - 25”,——> ' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33——c80aa9429562:21 - 57) \ G *************************** 1。行 *************************** GTID_SUBSET(“3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:23 - 25 ', ' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:21 - 57”):1 1行组(0.00秒)mysql >选择GTID_SUBSET (' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:20 - 25”,——> ' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33——c80aa9429562:21 - 57) \ G *************************** 1。行 *************************** GTID_SUBSET(“3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:20 - 25 ', ' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:21 - 57”):0 1行组(0.00秒)
给定两组全局事务标识符
set1
而且关于我校
,只返回来自的那些gtidset1
这些都不在关于我校
.该函数使用的所有GTID集都表示为字符串,必须用引号括起来,如下例所示:
mysql >选择GTID_SUBTRACT (' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:21 - 57”,——> ' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:21”)\ G *************************** 1。行 *************************** GTID_SUBTRACT(“3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:21 - 57 ', ' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:21”):3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:22 1 - 57行组(0.00秒)mysql >选择GTID_SUBTRACT (' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:21 - 57”,——> ' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:20 - 25”)\ G *************************** 1。行 *************************** GTID_SUBTRACT(“3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:21 - 57 ', ' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:20 - 25”):3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:26 1 - 57行组(0.00秒)mysql >选择GTID_SUBTRACT (' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 c80aa9429562:21 - 57”,——> ' 3 e11fa47 ca - 71 - 11 - e1 - 9 - e33 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秒)
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 >选择WAIT_FOR_EXECUTED_GTID_SET (' 3 e11fa47 - 71 - ca - 11 - e1 - 9 - e33 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 ()
相反,无论指定的事务通过什么复制通道或用户客户端到达服务器,它都可以工作。