本节介绍在 MySQL 9.0 中配置和启动基于 GTID 的复制的流程。这是一个 “冷启动” 程序,假设您是第一次启动源服务器,或者可以停止源服务器;有关从正在运行的源服务器使用 GTID 配置副本的信息,请参见 第 19.1.3.5 节,“使用 GTID 进行故障转移和扩展”。有关在线更改服务器上的 GTID 模式的更多信息,请参见 第 19.1.4 节,“在线更改 GTID 模式”。
此启动流程中最简单可能的 GTID 复制拓扑(包含一个源和一个副本)的关键步骤如下所示
如果复制已在运行,请通过将两台服务器设为只读来同步它们。
停止两台服务器。
启用 GTID 并配置正确的选项,重新启动两台服务器。
要启动服务器的 mysqld 选项将在本节后面的示例中介绍。
指示副本使用源作为复制数据源并使用自动定位。完成此步骤所需的 SQL 语句将在本节后面的示例中介绍。
创建新的备份。包含没有 GTID 的事务的二进制日志无法在已启用 GTID 的服务器上使用,因此在此之前创建的备份无法与您的新配置一起使用。
启动副本,然后在两台服务器上禁用只读模式,以便它们可以接受更新。
在以下示例中,两台服务器已经作为源和副本运行,使用 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;
等待所有正在进行的事务提交或回滚。然后,允许副本追赶源服务器。 确保副本已处理所有更新后,才能继续操作,这一点至关重要。
如果您将二进制日志用于复制之外的其他用途,例如进行时间点备份和恢复,请等到不再需要包含没有 GTID 的事务的旧二进制日志时再进行。理想情况下,请等待服务器清除所有二进制日志,并等待任何现有备份过期。
请务必了解,包含没有 GTID 的事务的日志无法在已启用 GTID 的服务器上使用。在继续之前,您必须确保拓扑结构中不存在没有 GTID 的事务。
步骤 2:停止两个服务器。 使用 mysqladmin 停止每个服务器,如下所示,其中 username
是具有足够权限关闭服务器的 MySQL 用户的用户名。
$> mysqladmin -uusername -p shutdown
然后在提示符下提供此用户的密码。
步骤 3:启用 GTID 启动两个服务器。 为了启用基于 GTID 的复制,每个服务器都必须通过将 gtid_mode
变量设置为 ON
并启用 enforce_gtid_consistency
变量来启用 GTID 模式,以确保仅将对基于 GTID 的复制安全的语句记录下来。例如:
gtid_mode=ON
enforce-gtid-consistency=ON
使用 --skip-replica-start
启动每个副本。有关与 GTID 相关的选项和变量的更多信息,请参见 第 19.1.6.5 节,“全局事务 ID 系统变量”。
使用 mysql.gtid_executed 表 时,启用二进制日志记录不是使用 GTID 的强制要求。源服务器必须始终启用二进制日志记录才能进行复制。但是,副本服务器可以使用 GTID,但不启用二进制日志记录。如果您需要在副本服务器上禁用二进制日志记录,则可以通过为副本指定 --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:进行新的备份。 在启用 GTID 之前创建的现有备份现在无法在已启用 GTID 的服务器上使用。此时请进行新的备份,以防止出现无法使用备份的情况。
例如,您可以对要进行备份的服务器执行 FLUSH LOGS
命令。然后,您可以显式地进行备份,或者等待您可能设置的任何定期备份例程的下一次迭代。
步骤 6:启动副本并禁用只读模式。 像这样启动副本:
mysql> START REPLICA;
以下步骤仅在您在步骤 1 中将服务器配置为只读模式时才需要。要允许服务器再次开始接受更新,请执行以下语句:
mysql> SET @@GLOBAL.read_only = OFF;
基于 GTID 的复制现在应该已运行,您可以像以前一样开始(或恢复)源服务器上的活动。 第 19.1.3.5 节,“使用 GTID 进行故障转移和扩展” 介绍了在使用 GTID 时创建新副本的方法。