暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的函数和运算符 - 与全局事务标识符(GTID)一起使用的函数

林员外聊编程 2021-09-14
550
与全局事务标识符(GTID)一起使用的函数

本文描述的函数将用于基于 GTID 的复制。重要的是要记住,所有这些函数都将 GTID 集合的字符串表示作为参数。因此,在使用 GTID 集合时,必须始终使用引号。
 
两个 GTID 集合的并集是将它们表示为字符串,并用逗号连接在一起。换句话说,可以定义一个非常简单的函数来获取两个 GTID 集的并集,类似于这里创建的:
 
CREATE FUNCTION GTID_UNION(g1 TEXT, g2 TEXT)
RETURNS TEXT DETERMINISTIC
RETURN CONCAT(g1,',',g2);
复制
 
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,如果 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,只返回在 set1 中存在,在 set2 中不存在的 GTID
 
与此函数一起使用的所有 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 集合中的所有事务之前超时了 timeout 指定秒数,则该函数将停止等待。timeout 是可选的,默认超时为 0 秒,在这种情况下,函数总是等待,直到应用了 GTID 集合中的所有事务。
 
WAIT_FOR_EXECUTED_GTID_SET() 监视应用于服务器上的所有 GTID,包括从所有复制通道和用户客户端到达的事务。不考虑复制通道是否已启动或已停止。
 
与此函数一起使用的 GTID 集合表示为字符串,因此必须用引号括起来,如下面的示例所示:
 
mysql> SELECT WAIT_FOR_EXECUTED_GTID_SET('3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5');
-> 0
复制
 
对于 WAIT_FOR_EXECUTED_GTID_SET(),返回值是查询的状态,其中 0 表示成功,1 表示超时。任何其他失败都会产生错误。
 
当任何客户端使用此函数等待 GTID 被应用时,不能将 gtid_mode 更改为 OFF
 
 
 
 
官方网址:
https://dev.mysql.com/doc/refman/8.0/en/gtid-functions.html
文章转载自林员外聊编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论