GTID复制使用的系统变量
本节中描述的MySQL Server系统变量用于监视和控制全局事务标识符(GTID)。有关更多信息,请参见 第17.1.3节“使用全局事务标识符进行复制”。
GTID复制使用的系统变量
以下系统变量用于基于GTID的复制:
binlog_gtid_simple_recovery
属性 值
命令行格式 --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_mode是 ON,但是 gtid_mode是 OFF为最新的二进制日志。
SET GTID_PURGED在生成最早的现有二进制日志之后,发出了 一条语句。
如果在任何一种情况下都计算出错误的GTID集,即使以后重新启动服务器,无论此选项的值如何,它都将保持错误。
enforce_gtid_consistency
属性 值
命令行格式 --enforce-gtid-consistency[=value]
系统变量 enforce_gtid_consistency
范围 全局
动态 没有
类型 布尔型
默认值 OFF
当此变量为true时,服务器通过仅允许执行可以以事务安全方式记录的语句来强制执行GTID一致性。您 必须启用GTID一致性(启用 enforce_gtid_consistency),然后才能开始与服务器 gtid_mode=ON; 否则,启用GTID模式会失败并显示错误。您 可以(并且应该)在使用 之前启用GTID一致性gtid_mode,以便测试系统是否准备好使用GTID。
由于enforce_gtid_consistencytrue 时只能记录交易安全的语句,因此,在这种情况下,无法使用此处列出的操作:
CREATE TABLE … SELECT 陈述
CREATE TEMPORARY TABLE 交易内的陈述
事务或语句同时更新事务表和非事务表。
该变量在运行时是只读的,必须在服务器启动时设置。
使用时binlog_format=ROW,允许使用涉及临时表的非事务DML语句 ,只要受该语句影响的任何非事务表都是临时表即可(错误#14272672)。
在MySQL 5.6中,可以但不建议在其中的服务器上 运行 mysql_upgradegtid_mode=ON,因为MySQL系统表使用的 MyISAM是非事务性存储引擎。
该选项允许单个语句更新非事务表,该语句主要用于mysql_install_db 和mysql_upgrade之类的程序。(错误#14722659)
gtid_executed
属性 值
系统变量 gtid_executed
范围 全局会议
动态 没有
类型 串
与全局范围一起使用时,此变量包含二进制日志中记录的所有事务的集合的表示。这是相同的值Executed_Gtid_Set列在的输出SHOW MASTER STATUS 和SHOW SLAVE STATUS。
当与会话作用域一起使用时,此变量包含在当前会话中写入高速缓存的事务集的表示。
在任何给定时间可以在二进制日志中找到的事务集等于 GTID_SUBTRACT(@@GLOBAL.gtid_executed, @@GLOBAL.gtid_purged); 也就是说,针对二进制日志中尚未清除的所有事务。
服务器启动时, @@GLOBAL.gtid_executed初始化为以下两个集合的并集:
Previous_gtids_log_event最新的二进制日志中 列出的GTID
Gtid_log_event在最新的二进制日志 中的每一个中找到的GTID 。
此后,在执行交易时将GTID添加到集合中。
发出RESET MASTER会使该变量的全局值(而不是会话值)重置为空字符串。除非由于清除了GTID,否则不会从该集合中移除GTID RESET MASTER。如果关闭服务器并删除所有二进制日志,则也会清除该集。
gtid_mode
属性 值
命令行格式 --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
属性 值
系统变量 gtid_next
范围 届会
动态 是
类型 列举
默认值 AUTOMATIC
有效值
AUTOMATIC
ANONYMOUS
UUID:NUMBER
此变量用于指定是否以及如何获取下一个GTID。
设置此系统变量的会话值是受限制的操作。会话用户必须具有足以设置受限会话变量的特权。请参见 第5.1.8.1节“系统变量特权”。
gtid_next 可以采用以下任何值:
AUTOMATIC:使用下一个自动生成的全局事务ID。
ANONYMOUS:事务没有全局标识符,仅由文件和位置标识。
全局交易ID UUID:NUMBER 格式。
如果gtid_mode为,则 设置此变量无效 OFF。
在此之前的MySQL 5.6.20,当GTIDs被启用,但 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当 gtid_next设置为以外的值AUTOMATIC; 在这种情况下,该语句将失败并显示错误。此类声明是不是在MySQL 5.6.12及以后不允许。(缺陷#16062608,错误#16715809,错误#69045)
gtid_owned
属性 值
系统变量 gtid_owned
范围 全局会议
动态 没有
类型 串
此只读变量包含一个列表,其内容取决于其范围。与会话作用域一起使用时,该列表将保存此客户端拥有的所有GTID。与全局范围一起使用时,它包含所有GTID及其所有者的列表。
gtid_purged
属性 值
系统变量 gtid_purged
范围 全局
动态 是
类型 串
已从二进制日志中清除的所有事务的集合。这是中的交易集的子集 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在崩溃后如何遍历二进制日志文件。