Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

19.1.3.4 使用 GTIDs 设置复制

本节描述了在 MySQL 8.3 中配置和启动基于 GTID 的复制的过程。这是一个“冷启动”过程,假设您是第一次启动源服务器,或者可以停止它;有关从运行中的源服务器 provision 复制服务器使用 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 节,“使用选项文件”以获取更多信息。或者,您可以在运行mysqld时使用启动选项。

以下步骤的大多数都需要使用 MySQL root 帐户或另一个拥有SUPER 权限的 MySQL 用户帐户。mysqladmin shutdown 需要SUPER 权限或SHUTDOWN 权限。

步骤 1:同步服务器。 只有在使用非 GTID 复制的服务器时才需要这一步骤。对于新的服务器,请跳到步骤 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 节,“全局事务 ID 系统变量”

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

步骤 4: 配置副本使用 GTID 自动定位。 告诉副本使用源服务器的 GTID 事务作为复制数据源,并使用 GTID 自动定位而不是文件定位。发出 CHANGE REPLICATION SOURCE TO 语句,包括 SOURCE_AUTO_POSITION 选项,以告诉副本源服务器的事务是由 GTID 标识的。

您可能还需要提供源服务器的主机名和端口号,以及复制用户账户的用户名和密码;如果这些已经在步骤 1 中设置过,并且不需要进行更改,可以安全地从语句中省略这些选项。

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

步骤 5: 创建新备份。 在启用 GTIDs 之前创建的备份现在不能再用于这些服务器。现在创建一个新备份,以便您不再没有可用的备份。

例如,您可以在服务器上执行 FLUSH LOGS。然后, explicit 地创建备份或等待下一个周期性备份例程。

步骤 6: 启动副本并禁用只读模式。 像这样启动副本:

mysql> START REPLICA;

只有在步骤 1 中配置服务器为只读模式时,才需要执行以下步骤。要允许服务器再次接受更新,请发出以下语句:

mysql> SET @@GLOBAL.read_only = OFF;

现在,基于 GTID 的复制应该正在运行,您可以像以前一样在源服务器上开始(或恢复)活动。第 19.1.3.5 节,“使用 GTIDs 进行故障转移和扩展” 讨论了使用 GTIDs 创建新副本时的创建新副本。