本节介绍在 MySQL 8.4 中配置和启动基于 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_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 时创建新的副本。