文档主页
MySQL 9.0 参考手册
相关文档 下载此手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  GTID 和组复制

20.4.1 GTID 和组复制

组复制使用 GTID(全局事务标识符)来准确跟踪每个服务器实例上已提交的事务。设置 gtid_mode=ONenforce_gtid_consistency=ON 是所有组成员的必备条件。来自客户端的传入事务由接收它们的组成员分配 GTID。来自组外源服务器的异步复制通道接收的任何复制事务会保留到达组成员时的 GTID。

分配给来自客户端的传入事务的 GTID 使用由 group_replication_group_name 系统变量指定的组名称作为标识符的 UUID 部分,而不是接收该事务的单个组成员的服务器 UUID。因此,可以识别组直接接收的所有事务,并将它们分组到 GTID 集中,而不必关心哪个成员最初接收了它们。每个组成员都有一块连续的 GTID 为其保留,当这些 GTID 被使用完时,它会保留更多。group_replication_gtid_assignment_block_size 系统变量设置块的大小,默认情况下每个块包含 100 万个 GTID。

当组本身在新的成员加入时生成视图更改事件(View_change_log_event)时,会在它们被记录到二进制日志中时赋予 GTID。默认情况下,这些事件的 GTID 也使用由 group_replication_group_name 系统变量指定的组名称作为标识符的 UUID 部分。您可以设置组复制系统变量 group_replication_view_change_uuid 以在视图更改事件的 GTID 中使用备用 UUID,以便于将其与从客户端接收的事务区分开来。如果您的设置允许在组之间进行故障转移,并且您需要识别和丢弃特定于备份组的事务,这将非常有用。备用 UUID 必须不同于成员的服务器 UUID。它还必须与使用 CHANGE REPLICATION SOURCE TO 语句的 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 选项应用于匿名事务的任何 UUID 不同。

GTID_ONLY=1REQUIRE_ROW_FORMAT = 1SOURCE_AUTO_POSITION = 1 应用于组复制通道 group_replication_appliergroup_replication_recovery。当这些通道被创建或复制组中的成员服务器被升级时,这些设置会自动在组复制通道上进行。这些选项通常使用 CHANGE REPLICATION SOURCE TO 语句设置,但请注意,您不能为组复制通道禁用它们。设置这些选项后,组成员不会在这些通道的复制元数据存储库中持久化文件名和文件位置。GTID 自动定位和 GTID 自动跳过用于在必要时查找正确的接收器和应用程序位置。

额外事务

如果加入的成员在其 GTID 集中包含现有组成员上不存在的事务,则不允许完成分布式恢复过程,并且无法加入组。如果执行了远程克隆操作,这些事务将被删除并丢失,因为加入的成员上的数据目录将被擦除。如果执行了来自捐赠者二进制日志的状态转移,这些事务可能会与组的事务发生冲突。

如果在停止组复制时对实例执行了管理事务,则成员上可能存在额外事务。为了避免以这种方式引入新事务,请在发出管理语句之前始终将 sql_log_bin 系统变量的值设置为 OFF,并在之后将其设置回 ON

SET SQL_LOG_BIN=0;
<administrator action>
SET SQL_LOG_BIN=1;

将此系统变量设置为 OFF 意味着从该点到您将其设置回 ON 之间发生的事务不会写入二进制日志,也不会为其分配 GTID。

如果加入的成员上存在额外事务,请检查受影响服务器的二进制日志,以查看额外事务实际包含的内容。协调加入的成员的数据和 GTID 集与当前位于组中的成员的最佳方法是使用 MySQL 的克隆功能将来自组中服务器的内容转移到受影响的服务器。有关如何执行此操作的说明,请参阅 第 7.6.7.3 节,“克隆远程数据”。如果需要该事务,请在成员成功重新加入后重新运行它。