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


19.1.3.4 设置 GTIDs 复制

本节描述了在 MySQL 8.4 中配置和启动基于 GTIDs 的复制的过程。这是一个“冷启动”过程,假设您要么是首次启动源服务器,要么是可以停止它;关于使用 GTIDs 从运行的源服务器进行复制的信息,请见第19.1.3.5节,“使用 GTIDs 进行故障转移和扩展”。关于在线更改 GTID 模式的服务器,请见第19.1.4节,“在线更改 GTID 模式”

在这个最简单的 GTID 复制拓扑结构中,包括一个源服务器和一个副本,关键步骤如下:

  1. 如果复制已经在运行,同步两个服务器,使其只读。

  2. 停止两个服务器。

  3. 重新启动两个服务器,以启用 GTIDs 和正确的选项配置。

    关于使用mysqld选项的讨论,请见后续部分的示例。

  4. 将副本指令使用源服务器作为复制数据源,并使用自动定位。需要实现这个步骤的 SQL 语句,请见后续部分的示例。

  5. 创建新的备份。包含没有 GTIDs 的事务的二进制日志不能在启用 GTIDs 的服务器上使用,因此在这个点之前创建的备份不能与您的新配置一起使用。

  6. 启动副本,然后在两个服务器上禁用只读模式,以便它们可以接受更新。

以下示例中,两个服务器已经在运行,使用 MySQL 的二进制日志位置基于复制协议。如果您正在使用新服务器,请见第19.1.2.3节,“创建复制用户”,了解添加专门用于复制连接的用户,并第19.1.2.1节,“设置复制源配置”,了解设置server_id变量。以下示例展示了如何将mysqld启动选项存储在服务器的选项文件中,了解更多信息,请见第6.2.2.2节,“使用选项文件”。Alternatively,您可以在运行mysqld时使用启动选项。

大多数后续步骤都需要使用 MySQL 的 root 账户或拥有 SUPER 权限的 MySQL 用户账户。mysqladmin shutdown 需要拥有 SUPER 权限或 SHUTDOWN 权限。

步骤 1: 同步服务器.  这一步只在已经使用 GTIDs 的服务器上执行。对于新服务器,直接跳到步骤 3。将服务器设置为只读模式,设置 read_only 系统变量为 ON,在每个服务器上执行以下命令:

mysql> SET @@GLOBAL.read_only = ON;

等待所有正在进行的事务提交或回滚。然后,允许复制服务器跟上源服务器。 非常重要的是确保复制服务器已经处理了所有更新

如果您使用二进制日志来实现其他功能,例如点时备份和恢复,等待您不再需要包含没有 GTIDs 的事务的旧二进制日志。理想情况下,等待服务器清除所有二进制日志,并等待任何现有备份过期。

Important

需要注意的是,包含没有 GTIDs 的事务的日志不能在启用 GTIDs 的服务器上使用。继续执行前,必须确保没有 GTIDs 的事务存在于拓扑结构中。

步骤 2: 停止两个服务器.  使用 mysqladmin 停止每个服务器,如下所示,其中 username 是拥有足够权限以关闭服务器的 MySQL 用户名:

$> mysqladmin -uusername -p shutdown

然后输入该用户的密码。

步骤 3: 启动两个服务器以启用 GTIDs.  要启用基于 GTID 的复制,每个服务器都必须以启用 GTID 模式启动,设置 gtid_mode 变量为 ON,并启用 enforce_gtid_consistency 变量,以确保只记录了安全的基于 GTID 的复制语句。例如:

gtid_mode=ON
enforce-gtid-consistency=ON

使用 --skip-replica-start 启动每个复制服务器。关于 GTID 相关选项和变量的更多信息,请参阅 第 19.1.6.5 节,“Global Transaction ID System Variables”

不需要在使用GTIDs时启用二进制日志记录,以使用mysql.gtid_executed Table。源服务器必须始终启用二进制日志记录以便复制。然而,副本服务器可以使用GTIDs,但不需要二进制日志记录。如果您需要在副本服务器上禁用二进制日志记录,可以使用--skip-log-bin--log-replica-updates=OFF选项。

Step 4: 配置副本以使用GTID-based auto-positioning.  告诉副本使用基于GTID的事务作为复制数据源,并使用GTID-based auto-positioning,而不是基于文件的定位。使用CHANGE REPLICATION SOURCE TO语句在副本上,包括SOURCE_AUTO_POSITION选项,以告诉副本源的事务由GTIDs标识。

您可能还需要提供源主机名、端口号、复制用户帐户用户名和密码,以便副本可以连接到源服务器;如果这些值已经在Step 1中设置,并且不需要进一步修改,可以安全地从语句中省略这些选项。

mysql> CHANGE REPLICATION SOURCE TO
     >     SOURCE_HOST = host,
     >     SOURCE_PORT = port,
     >     SOURCE_USER = user,
     >     SOURCE_PASSWORD = password,
     >     SOURCE_AUTO_POSITION = 1;

Step 5: 取得新的备份.  现在启用GTIDs,您不能再使用以前的备份了。取得新的备份,以免您没有可用的备份。

例如,您可以在备份服务器上执行FLUSH LOGS。然后,您可以手动取得备份或等待下一次定期备份的执行。

Step 6: 启动副本并禁用只读模式.  启动副本如下:

mysql> START REPLICA;

如果您在Step 1中配置了只读服务器,可以使用以下语句来允许服务器重新接受更新:

mysql> SET @@GLOBAL.read_only = OFF;

现在,GTID-based复制应该正在运行,您可以恢复源服务器的活动Section 19.1.3.5, “Using GTIDs for Failover and Scaleout”讨论了使用GTIDs创建新的副本。