Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Replication From a Source Without GTIDs to a Replica With GTIDs

19.1.3.6 从源服务器没有GTID到GTID支持的副本服务器

您可以使用复制通道来为未经GTID标识的交易分配GTID。这项功能使得可以从不支持GTID的源服务器复制数据到支持GTID的副本服务器。如果可能,请在源服务器上启用GTID,如第19.1.4节,“在线更改GTID模式”中所述。该功能旨在为无法在源服务器上启用GTID的场景设计。请注意,这项功能不支持从早于前一个发布系列的MySQL源服务器复制数据,因此MySQL 8.3是最早支持的源服务器版本。

您可以使用ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS选项在复制通道上启用GTID分配。LOCAL将GTID分配到包括副本服务器的UUID(server_uuid设置)。uuid将GTID分配到指定的UUID,例如副本服务器的server_uuid设置。使用非本地UUID可以区分来自副本服务器和来自源服务器的交易,以及在多源副本服务器上区分来自不同源的交易。如果源服务器发送的交易之一已经有GTID,那么该GTID将被保留。

Important

在使用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组成员服务器上的通道中,不要指定Group Replication组名作为UUID以创建GTIDs。

使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 在复制通道上不是将 GTID-基于的复制引入该通道。该 GTID 集合(gtid_executed)来自于使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 的副本,不应该在另一个服务器或与另一个服务器的 gtid_executed 集合进行转移或比较。分配给匿名事务的 GTIDs,以及您为它们选择的 UUID,只对该副本的本地使用有意义。除非是该副本的下游副本或从该副本备份创建的服务器。

如果您设置了下游副本,这些服务器不具有 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 功能。只有直接从非 GTID 服务器接收事务的副本需要在相关的复制通道上设置 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS。在该副本和其下游副本之间,您可以比较 GTID 集合、失败转移到另一个副本、使用备份创建更多副本,就像在任何 GTID-基于的复制拓扑结构中一样。ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 在外部服务器外部接收事务的地方使用。

使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 的复制通道具有以下行为差异与 GTID-基于的复制:

  • GTIDs 将在事务被应用时分配(除非事务已经有了 GTID)。通常情况下,GTID 在事务提交时在源服务器上分配,并与事务一起发送到副本上。在多线程副本上,这意味着 GTIDs 的顺序不一定与事务的顺序相符,即使 replica_preserve_commit_order = 1。

  • SOURCE_LOG_FILESOURCE_LOG_POS 选项的 CHANGE REPLICATION SOURCE TO 语句用于定位复制 I/O(接收)线程,而不是 SOURCE_AUTO_POSITION 选项。

  • SET GLOBAL sql_replica_skip_counter 语句用于在使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 的复制通道上跳过事务,而不是提交空事务。请参阅 第19.1.7.3节,“跳过事务”

  • UNTIL SQL_BEFORE_GTIDSUNTIL_SQL_AFTER_GTIDS 选项的 START REPLICA 语句不能用于该通道。

  • 函数WAIT_FOR_EXECUTED_GTID_SET()可以跨服务器工作,可以用来等待服务器的任何下游副本,如果这些副本启用了ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS。要等待具有ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS启用的通道与源同步,可以使用SOURCE_POS_WAIT()函数。

性能Schemareplication_applier_configuration表显示了 replication 通道上是否将 GTIDs 分配给匿名事务,UUID 是什么,以及它是 replica 服务器的 UUID (LOCAL)还是用户指定的 UUID (UUID). 这些信息也记录在 applier 元数据存储库中。一个RESET REPLICA ALL语句重置了ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS设置,但是RESET REPLICA语句不可以。