为了能够安全地配置在线服务器的复制模式,了解复制的一些关键概念非常重要。本节解释了这些概念,是尝试修改在线服务器的复制模式之前的必读内容。
MySQL 中可用的复制模式依赖于不同的技术来识别记录的事务。复制使用的事务类型如下:
GTID 事务由 形式的全局事务标识符 (GTID) 标识
UUID:NUMBER
。日志中的每个 GTID 事务总是以Gtid_log_event
. 可以使用 GTID 或使用文件名和位置来解决 GTID 事务。匿名事务没有分配 GTID,MySQL 确保日志中的每个匿名事务都以
Anonymous_gtid_log_event
. 在以前的版本中,匿名交易之前没有任何特定事件。匿名交易只能使用文件名和位置来寻址。
使用 GTID 时,您可以利用 GTID 自动定位和自动故障转移,以及
使用 Performance Schema 表使用WAIT_FOR_EXECUTED_GTID_SET()
、
session_track_gtids
监视复制的事务。
从运行以前版本的 MySQL 的源接收的中继日志中的事务可能根本没有任何特定事件,但在重放并记录在副本的二进制日志中之后,它们前面有一个
Anonymous_gtid_log_event
.
在线配置复制模式的能力意味着gtid_mode
和
enforce_gtid_consistency
变量现在都是动态的,并且可以由具有足以设置全局系统变量的权限的帐户从顶级语句进行设置。请参阅
第 5.1.9.1 节,“系统变量权限”。在 MySQL 5.6 及更早版本中,这两个变量只能在服务器启动时使用适当的选项进行配置,这意味着对复制模式的更改需要重新启动服务器。在所有版本
gtid_mode
中都可以设置为
ON
或OFF
,对应是否使用 GTID 来标识事务。什么时候gtid_mode=ON
无法复制匿名交易,并且
gtid_mode=OFF
只能复制匿名交易。那时
新gtid_mode=OFF_PERMISSIVE
事务是匿名的,
同时允许复制的事务是 GTID 或匿名事务。然后
新事务使用
GTID,同时允许复制的事务是 GTID 或匿名事务。这意味着可以有一个复制拓扑,其中的服务器同时使用匿名和 GTID 事务。例如,一个源
可以复制到一个副本
。的有效值如下,并按以下顺序排列:
gtid_mode=ON_PERMISSIVE
gtid_mode=ON
gtid_mode=ON_PERMISSIVE
gtid_mode
OFF
OFF_PERMISSIVE
ON_PERMISSIVE
ON
需要注意的是,
gtid_mode
根据上面的顺序,一次只能改变一个步骤的状态。例如,如果
gtid_mode
当前设置为
OFF_PERMISSIVE
,则可以更改为
OFF
或ON_PERMISSIVE
但不能更改为ON
。这是为了确保服务器正确处理在线从匿名事务更改为 GTID 事务的过程。gtid_mode=ON
当您在和
之间切换时
gtid_mode=OFF
,GTID 状态(换句话说 的值
gtid_executed
)是持久的。这确保了服务器已应用的 GTID 集始终被保留,而不管
gtid_mode
.
与 GTID 相关的字段显示正确的信息,而不管当前选择的是什么
gtid_mode
。这意味着
在
Performance Schema 表中
显示 GTID 集合的字段gtid_executed
,
以及 GTID 相关结果
(或在 MySQL 8.0.22 之前,
)现在在没有 GTID 时返回空字符串。显示单个 GTID 的字段(例如
在 Performance Schema
表中)现在会在未使用 GTID 事务时显示。
gtid_purged
RECEIVED_TRANSACTION_SET
replication_connection_status
SHOW REPLICA
STATUS
SHOW SLAVE
STATUS
CURRENT_TRANSACTION
replication_applier_status_by_worker
ANONYMOUS
Replication from a source using
gtid_mode=ON
提供了使用 GTID 自动定位的能力,使用语句的配置
SOURCE_AUTO_POSITION
(
CHANGE REPLICATION SOURCE TO
从 MySQL 8.0.23 开始),或者语句的
MASTER_AUTO_POSITION
选项
CHANGE MASTER TO
(MySQL 8.0.23 之前)。使用的复制拓扑会影响是否可以启用自动定位,因为此功能依赖于 GTID,并且与匿名事务不兼容。强烈建议在启用自动定位之前确保拓扑中没有剩余匿名事务,请参阅
第 17.1.4.2 节,“在线启用 GTID 事务”。
源和副本的有效组合
gtid_mode
和自动定位如下表所示,其中源的gtid_mode
显示在水平方向上,副本的
gtid_mode
显示在垂直方向上。每个条目的含义如下:
表 17.1 源和副本 gtid_mode 的有效组合
资源 |
资源 |
资源 |
资源 |
|
---|---|---|---|---|
复制品 |
是 |
是 |
否 |
否 |
复制品 |
是 |
是 |
是 |
是* |
复制品 |
是 |
是 |
是 |
是* |
复制品 |
否 |
否 |
是 |
是* |
当前选择的gtid_mode
也会影响gtid_next
变量。gtid_mode
下表显示了服务器对于和的不同值的行为gtid_next
。每个条目的含义如下:
ANONYMOUS
:生成匿名交易。Error
: 产生错误,无法执行SET GTID_NEXT
。UUID:NUMBER
:生成具有指定 UUID:NUMBER 的 GTID。New GTID
:使用自动生成的编号生成 GTID。
当二进制日志关闭并
gtid_next
设置为 时
AUTOMATIC
,则不会生成 GTID。这与以前版本的行为一致。