16.1.3.4 使用 GTID 设置复制

本节介绍了在 MySQL 5.7 中配置和启动基于 GTID 的复制的过程。这是一个“冷启动”过程,假定您是第一次启动复制源服务器,或者可以停止它。有关使用来自正在运行的源的 GTID 调配副本的信息,请参见第 16.1.3.5 节,“使用 GTID 进行故障转移和横向扩展”。有关在线更改服务器上的 GTID 模式的信息,请参阅第 16.1.4 节“更改在线服务器上的复制模式”

对于由一个源和一个副本组成的最简单的 GTID 复制拓扑,此启动过程中的关键步骤如下:

  • 如果复制已在运行,则通过将它们设置为只读来同步两个服务器。

  • 停止两个服务器。

  • 重新启动两个启用了 GTID 并配置了正确选项的服务器。

在本节后面的示例中讨论了如上所述启动服务器所必需的mysqld选项。

  • 指示副本将源用作复制数据源并使用自动定位。本节后面的示例中描述了完成此步骤所需的 SQL 语句。

  • 进行新的备份。包含没有 GTID 的事务的二进制日志不能在启用了 GTID 的服务器上使用,因此在此之前进行的备份不能与新配置一起使用。

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

在以下示例中,两个服务器已经使用 MySQL 的基于二进制日志位置的复制协议作为源服务器和副本服务器运行。如果您是从新服务器开始的,请参阅第 16.1.2.2 节,“创建要复制的用户”有关为复制连接添加特定用户的信息,以及第 16.1.2.1 节,“设置复制源配置”有关设置server_id变量的信息。以下示例显示了如何将mysqld启动选项存储在服务器的选项文件中,有关更多信息,请参见第 4.2.2.2 节“使用选项文件”。或者,您可以在运行mysqld时使用启动选项。

接下来的大多数步骤要求使用 MySQL root帐户或具有SUPER特权的另一个 MySQL 用户帐户。 mysqladmin shutdown需要SUPER特权或SHUTDOWN特权。

步骤 1:同步服务器. 仅当使用已经复制但不使用 GTID 的服务器时,才需要执行此步骤。对于新服务器,请 continue 执行步骤 3.通过发出以下命令,在每台服务器上将read_only系统变量设置为ON,以使服务器变为只读状态:

mysql> SET @@GLOBAL.read_only = ON;

await 所有正在进行的事务提交或回滚。然后,允许副本追赶源。 *非常重要的是,在 continue 操作之前,确保副本已处理所有更新。

如果您将二进制日志用于复制以外的其他目的(例如进行时间点备份和还原),请等到不需要包含没有 GTID 的事务的旧二进制日志。理想情况下,请 await 服务器清除所有二进制日志,然后 await 任何现有备份到期。

Important

重要的是要理解,包含未包含 GTID 的事务的日志不能在启用了 GTID 的服务器上使用。在 continue 之前,必须确保没有 GTID 的事务在拓扑中的任何地方都不存在。

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

shell> mysqladmin -uusername -p shutdown

然后在提示时提供该用户的密码。

步骤 3:启动两个启用了 GTID 的服务器. 要启用基于 GTID 的复制,必须通过将gtid_mode变量设置为ON并启用enforce_gtid_consistency变量来启用 GTID 模式,以确保只有语句对于基于 GTID 的复制是安全的。例如:

gtid_mode=ON
enforce-gtid-consistency=ON

此外,在配置副本设置之前,应使用--skip-slave-start选项启动副本。有关 GTID 相关选项和变量的更多信息,请参见第 16.1.6.5 节“全局事务 ID 系统变量”

使用mysql.gtid_executed Table时,不必强制启用二进制日志记录以使用 GTID。复制源服务器必须始终启用二进制日志记录才能进行复制。但是,副本服务器可以使用 GTID,但不使用二进制日志记录。如果需要禁用副本上的二进制日志记录,可以通过为副本指定--skip-log-bin--log-slave-updates=OFF选项来实现。

步骤 4:将副本配置为使用基于 GTID 的自动定位. 告诉副本使用基于 GTID 的事务的源作为复制数据源,并使用基于 GTID 的自动定位而不是基于文件的自动定位。定位。在副本上发出更改为主语句,包括该语句中的MASTER_AUTO_POSITION选项,以告知副本该源的事务由 GTID 标识。

您可能还需要提供源的主机名和端口号以及复制用户帐户的用户名和密码的适当值,复制副本可以使用该值来连接源。如果已经在步骤 1 之前设置了这些选项,并且无需进行进一步更改,则可以安全地从此处显示的语句中省略相应的选项。

mysql> CHANGE MASTER TO
     >     MASTER_HOST = host,
     >     MASTER_PORT = port,
     >     MASTER_USER = user,
     >     MASTER_PASSWORD = password,
     >     MASTER_AUTO_POSITION = 1;

MASTER_LOG_FILE选项或MASTER_LOG_POS选项都不能与MASTER_AUTO_POSITION设置为 1 一起使用。尝试这样做会导致更改为主语句失败并出现错误。

第 5 步:进行新的备份. 启用 GTID 以后,在启用 GTID 之前创建的现有备份将无法再在这些服务器上使用。此时,请进行新的备份,以免没有可用的备份。

例如,您可以在进行备份的服务器上执行FLUSH LOGS。然后,要么明确地进行备份,要么 await 您可能设置的任何定期备份例程的下一个迭代。

步骤 6:启动副本并禁用只读模式. 按照以下方式启动副本:

mysql> START SLAVE;

仅当在步骤 1 中将服务器配置为只读时,才需要执行以下步骤。要使服务器再次开始接受更新,请发出以下语句:

mysql> SET @@GLOBAL.read_only = OFF;

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