您可以设置复制通道,以便将GTID分配给不具有GTID的已复制事务。这项功能使得从不具有GTID的源服务器到具有GTID的副本的复制成为可能。如果可以在源服务器上启用GTID,如第19.1.4节“在线服务器上的GTID模式更改”所述,请使用该方法。否则,这项功能适用于无法启用GTID的源服务器。请注意,按照MySQL复制的标准,这项功能不支持从早于前一个版本系列的MySQL源服务器的复制,因此MySQL 8.2是支持的最早源服务器版本。
您可以使用CHANGE REPLICATION SOURCE TO
语句的ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
选项在复制通道上启用GTID分配。LOCAL
将分配包含副本自己的UUID(server_uuid
设置)的GTID。
将分配包含指定UUID的GTID,例如源服务器的uuid
server_uuid
设置。使用非本地UUID可以区分副本和源服务器上originated的交易,以及多源副本上来自不同源的交易。如果源服务器发送的任何交易已经具有GTID,那么该GTID将被保留。
使用ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
的副本不能在故障转移时取代源服务器,并且从副本创建的备份不能用于恢复源服务器。同样的限制也适用于使用ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
的其他副本。
副本必须将gtid_mode=ON
设置,并且不能在以后更改,除非设置ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS=OFF
。如果副本服务器在没有启用GTID的情况下启动,并且为任何复制通道设置了ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
,那么设置将不被更改,但错误日志中将写入警告信息,解释如何更改情况。
对于多源副本,您可以混合使用ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
的通道和不使用的通道。Group Replication组成员不能使用ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
,但异步复制通道可以这样做。对于Group Replication组成员,请不要将Group Replication组名指定为创建GTID的UUID。
使用ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
在复制通道上不同于引入GTID-based复制。副本的GTID集(gtid_executed
)不应传输到其他服务器或与其他服务器的gtid_executed
集进行比较。分配给匿名事务的GTID,以及您选择的UUID,只对该副本的使用具有意义。唯一的例外是该副本的下游副本,以及从该副本创建的服务器。
如果您设置了下游副本,这些服务器不启用ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
。只有直接从非GTID源服务器接收事务的副本需要在相关的复制通道上启用ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
。在该副本和其下游副本之间,您可以比较GTID集,进行故障转移,并使用备份创建其他副本,如同任何GTID-based复制拓扑结构中一样。ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
用于从非GTID服务器外部接收事务。
使用ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
的复制通道具有以下行为差异与GTID-based复制:
-
GTIDs是在复制事务应用时分配的(除非它们已经有了GTID)。GTID通常是在复制源服务器上事务提交时分配的,并与事务一起发送到副本上。在多线程副本上,这意味着GTIDs的顺序不一定与事务的顺序匹配,即使
replica_preserve_commit_order
= 1。 -
SOURCE_LOG_FILE
和SOURCE_LOG_POS
选项用于CHANGE REPLICATION SOURCE TO
语句中,用于定位复制I/O(receiver)线程,而不是SOURCE_AUTO_POSITION
选项。 -
SET GLOBAL sql_replica_skip_counter
语句用于跳过在使用ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
设置的复制通道上的事务,而不是提交空事务的方法。有关说明,请参阅第 19.1.7.3 节,“跳过事务”。 -
UNTIL SQL_BEFORE_GTIDS
和UNTIL_SQL_AFTER_GTIDS
选项不能用于该通道的START REPLICA
语句。 -
函数
WAIT_FOR_EXECUTED_GTID_SET()
可以跨服务器工作,并可以用于等待任何下游副本服务器,该服务器启用了ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
。要等待启用ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
的通道赶上不使用GTIDs的源,请使用SOURCE_POS_WAIT()
函数。
性能模式replication_applier_configuration
表显示了在复制通道上是否将GTIDs分配给匿名事务、UUID是什么,以及是否是副本服务器的UUID(LOCAL
)或用户指定的UUID(UUID
)。该信息也记录在applier元数据存储库中。RESET REPLICA ALL
语句重置ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
设置,但RESET REPLICA
语句不重置该设置。