本节中描述的 MySQL 服务器系统变量用于监视和控制全局事务标识符 (GTID)。有关其他信息,请参阅 第 17.1.3 节,“使用全局事务标识符进行复制”。
以下系统变量用于基于 GTID 的复制:
-
命令行格式 --binlog-gtid-simple-recovery[={OFF|ON}]
介绍 5.6.23 系统变量 binlog_gtid_simple_recovery
范围 全球的 动态的 不 类型 布尔值 默认值 OFF
此变量控制在 MySQL 启动或重新启动时搜索 GTID 期间如何迭代二进制日志文件。在 MySQL 5.6.21 版本中,添加了这个变量
simplified_binlog_gtid_recovery
,在 MySQL 5.6.23 版本中它被重命名为binlog_gtid_simple_recovery
.时
binlog_gtid_simple_recovery=FALSE
,迭代从最新的文件开始初始化gtid_executed
,并从最旧的文件开始初始化gtid_purged
。如果您有大量没有 GTID 事件的二进制日志文件,例如在gtid_mode=OFF
.当 时 ,服务器在迭代填充和
binlog_gtid_simple_recovery=TRUE
时不会打开两个以上的二进制日志 ,无论是在服务器重新启动期间还是在清除二进制日志时。gtid_purged
gtid_executed
笔记如果该选项被启用, 在以下情况下可能会被错误地初始化
gtid_executed
:gtid_purged
如果在任何一种情况下计算出不正确的 GTID 集,即使稍后重新启动服务器,它仍然不正确,无论此选项的值如何。
-
命令行格式 --enforce-gtid-consistency[=value]
系统变量 enforce_gtid_consistency
范围 全球的 动态的 不 类型 布尔值 默认值 OFF
当此变量为真时,服务器通过仅允许执行那些可以以事务安全方式记录的语句来强制执行 GTID 一致性。您 必须先启用 GTID 一致性(通过启用
enforce_gtid_consistency
),然后才能启动服务器gtid_mode=ON
;否则,启用 GTID 模式会失败并出现错误。您 可以(并且应该)在使用 之前启用 GTID 一致性gtid_mode
,以测试系统是否准备好使用 GTID。由于在为真时只能记录事务安全语句
enforce_gtid_consistency
,因此在这种情况下不能使用此处列出的操作:CREATE TEMPORARY TABLE
交易中的陈述更新事务和非事务表的事务或语句。
该变量在运行时是只读的,必须在服务器启动时设置。
使用 时允许涉及临时表的非事务性 DML 语句
binlog_format=ROW
,只要受语句影响的任何非事务性表都是临时表(缺陷 #14272672)。在 MySQL 5.6 中,可以但不建议 在服务器 where 上 运行mysql_upgrade
gtid_mode=ON
,因为 MySQL 系统表使用MyISAM
非事务性存储引擎。此选项允许单个语句更新非事务表,主要用于mysql_install_db 和mysql_upgrade等程序。(漏洞 #14722659)
-
系统变量 gtid_executed
范围 全局,会话 动态的 不 类型 细绳 单元 一组 GTID 当与全局范围一起使用时,此变量包含二进制日志中记录的所有事务集的表示。 这与和
Executed_Gtid_Set
的输出中列的值相同。SHOW MASTER STATUS
SHOW SLAVE STATUS
当与会话范围一起使用时,此变量包含在当前会话中写入缓存的一组事务的表示。
在任何给定时间可以在二进制日志中找到的事务集等于
GTID_SUBTRACT(@@GLOBAL.gtid_executed, @@GLOBAL.gtid_purged)
;也就是说,二进制日志中所有尚未被清除的事务。服务器启动时,
@@GLOBAL.gtid_executed
初始化为以下两组的并集:Previous_gtids_log_event
最新二进制日志中 列出的 GTIDGtid_log_event
在最新的二进制日志 中的 每个中找到的 GTID 。
此后,随着事务的执行,GTID 被添加到集合中。
发出
RESET MASTER
导致此变量的全局值(但不是会话值)重置为空字符串。除了由于RESET MASTER
. 如果服务器关闭并删除所有二进制日志,该集也会被清除。 -
命令行格式 --gtid-mode=MODE
系统变量 gtid_mode
范围 全球的 动态的 不 类型 枚举 默认值 OFF
有效值 OFF
UPGRADE_STEP_1
UPGRADE_STEP_2
ON
此变量指定是否使用全局事务标识符 (GTID) 来标识事务。该变量在运行时是只读的,必须在服务器启动时设置。
使用 启动服务器
gtid_mode=ON
要求服务器也使用--log-bin
、--log-slave-updates
和--enforce-gtid-consistency
选项启动。将此选项设置为
OFF
当二进制日志或中继日志中有 GTID 时,或者ON
当仍有匿名事务要执行时,会导致错误。重要的此选项不使用布尔值;它的值实际上是枚举的。设置此选项时不应尝试使用数值,因为这可能会导致意外结果。值
UPGRADE_STEP_1
和UPGRADE_STEP_2
保留供将来使用,但目前在生产中不支持;如果您设置gtid_mode
为这两个值中的任何一个,服务器将拒绝启动。gtid_purged
和 的值在gtid_executed
时不持久gtid_mode=off
。因此,更改gtid_mode
为 后OFF
,一旦清除所有包含 GTID 的二进制日志,这些变量的值将丢失。 -
系统变量 gtid_next
范围 会议 动态的 是的 类型 枚举 默认值 AUTOMATIC
有效值 AUTOMATIC
ANONYMOUS
UUID:NUMBER
该变量用于指定是否以及如何获取下一个 GTID。
设置这个系统变量的会话值是一个受限的操作。会话用户必须具有足以设置受限会话变量的权限。请参阅 第 5.1.8.1 节,“系统变量权限”。
gtid_next
可以采用以下任何值:AUTOMATIC
:使用下一个自动生成的全局事务 ID。ANONYMOUS
: 事务没有全局标识符,仅由文件和位置标识。格式 为
UUID
: 的全局事务 ID 。NUMBER
gtid_mode
如果是 ,则 设置此变量无效OFF
。在 MySQL 5.6.20 之前,当启用 GTID 但未启用
gtid_next
时 ,在非临时表与临时表的组合上使用时,或者在使用事务存储引擎的临时表与使用非事务存储引擎的临时表的组合上使用时,不能正常工作AUTOMATIC
。DROP TABLE
在 MySQL 5.6.20 及更高版本中,DROP TABLE
或DROP TEMPORARY TABLE
在与这些表组合中的任何一个一起使用时失败并显示显式错误。(漏洞 #17620053)仅在 MySQL 5.6.11 中,您不能执行任何语句
CHANGE MASTER TO
,START SLAVE
,STOP SLAVE
,REPAIR TABLE
,OPTIMIZE TABLE
,ANALYZE TABLE
,CHECK TABLE
,CREATE SERVER
,ALTER SERVER
,DROP SERVER
,CACHE INDEX
,LOAD INDEX INTO CACHE
,FLUSH
, 或RESET
whengtid_next
设置为 ; 以外的任何值AUTOMATIC
;在这种情况下,语句会因错误而失败。MySQL 5.6.12 及更高版本中不禁止此类语句。(错误#16062608、错误#16715809、错误#69045) -
系统变量 gtid_owned
范围 全局,会话 动态的 不 类型 细绳 单元 一组 GTID 这个只读变量包含一个列表,其内容取决于其范围。当与会话范围一起使用时,该列表包含此客户端拥有的所有 GTID;当与全局范围一起使用时,它包含所有 GTID 及其所有者的列表。
-
系统变量 gtid_purged
范围 全球的 动态的 是的 类型 细绳 单元 一组 GTID 已从二进制日志中清除的所有事务的集合。这是 中交易集的一个子集
gtid_executed
。当服务器启动时,全局值
gtid_purged
被初始化为Previous_gtid_log_event
最早的二进制日志包含的一组 GTID。当二进制日志被清除时,gtid_purged
从现在已经成为最旧的二进制日志中重新读取。要更新这个变量的值,
gtid_mode
必须是ON
,gtid_executed
必须是空串,因此gtid_purged
也是空串。这可能发生在复制之前未启动时,或者复制之前未使用 GTID 时。执行后
SET gtid_purged
,记下当前的二进制日志文件名,可以使用查看SHOW MASTER STATUS
。如果服务器在这个文件被清除之前重新启动,那么你应该使用binlog_gtid_simple_recovery=0
(5.6 中的默认值)来避免gtid_purged
或被gtid_executed
错误地计算。发出
RESET MASTER
会导致此变量的值重置为空字符串。 simplified_binlog_gtid_recovery
命令行格式 --simplified-binlog-gtid-recovery[={OFF|ON}]
介绍 5.6.21 弃用 5.6.23 系统变量 simplified_binlog_gtid_recovery
范围 全球的 动态的 不 类型 布尔值 默认值 OFF
此选项已弃用;希望在未来的 MySQL 版本中将其删除。使用该
binlog_gtid_simple_recovery
变量来控制 MySQL 在崩溃后如何遍历二进制日志文件。