本节描述了在 MySQL 8.3 中配置和启动基于 GTID 的复制的过程。这是一个“冷启动”过程,假设您是第一次启动源服务器,或者可以停止它;有关从运行中的源服务器 provision 复制服务器使用 GTIDs 的信息,请参阅第 19.1.3.5 节,“使用 GTIDs 实现故障转移和扩展”。有关在线服务器更改 GTID 模式的信息,请参阅第 19.1.4 节,“在线服务器更改 GTID 模式”。
在最简单的 GTID 复制拓扑结构中,包括一个源服务器和一个复制服务器,启动过程的关键步骤如下:
-
如果复制已经在运行,请通过使服务器变为只读来同步两个服务器。
-
停止两个服务器。
-
使用 GTIDs 启用和正确的选项配置重新启动两个服务器。
在本节后面的示例中讨论了启动服务器所需的mysqld选项。
-
指示复制服务器使用源服务器作为复制数据源,并使用自动定位。后面的示例中将描述实现这一步骤所需的 SQL 语句。
-
创建一个新的备份。包含没有 GTIDs 的事务的二进制日志不能在启用了 GTIDs 的服务器上使用,因此在此点之前创建的备份不能用于新的配置。
-
启动复制服务器,然后在两个服务器上禁用只读模式,以便它们可以接受更新。
在以下示例中,两个服务器已经使用 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 的事务。理想情况下,等待服务器清除所有二进制日志,并等待现有的备份到期。
非常重要的是,不能在启用了 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 创建新副本时的创建新副本。