Documentation Home

17.1.3.2 使用 GTID 设置复制

本节描述了在 MySQL 5.6 中配置和启动基于 GTID 的复制的过程。这是一个 冷启动过程,假设您是第一次启动复制源服务器,或者可以停止它;有关使用来自正在运行的源的 GTID 供应副本的信息,请参阅 第 17.1.3.3 节,“使用 GTID 进行故障转移和横向扩展”

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

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

  2. 停止两个服务器。

  3. 重新启动两台服务器,启用 GTID、二进制日志记录和副本更新日志记录,并禁用对基于 GTID 的复制不安全的语句。此外,服务器应以只读模式启动,并且应防止复制 SQL 和 I/O 线程在副本上启动。

    启动服务器所需的mysqld选项将在本节后面的示例中讨论。

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

  5. 进行新的备份。包含没有 GTID 的事务的二进制日志不能在启用 GTID 的服务器上使用,因此在此之前进行的备份不能用于您的新配置。

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

在下面的示例中,两台服务器已经作为源服务器和副本服务器运行,使用 MySQL 的经典 基于文件的复制协议。

接下来的大部分步骤都需要使用 MySQL 帐户或其他具有权限 root的 MySQL 用户帐户。mysqladmin 需要特权或 特权。 SUPER shutdownSUPERSHUTDOWN

第 1 步:同步服务器。  将服务器设置为只读。为此, read_only通过在两台服务器上执行以下语句来启用系统变量:

mysql> SET @@GLOBAL.read_only = ON;

等待所有正在进行的事务提交或回滚。然后,让副本赶上源。在继续之前确保副本已处理所有更新非常重要

如果您将二进制日志用于除复制之外的任何其他用途,例如进行时间点备份和恢复,请等到您不需要包含没有 GTID 的事务的旧二进制日志。理想情况下,等待服务器清除所有二进制日志,并等待任何现有备份过期。

重要的

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

第 2 步:停止两个服务器。 使用mysqladmin 停止每个服务器,如下所示,其中username是具有足够权限关闭服务器的 MySQL 用户的用户名:

$> mysqladmin -uusername -p shutdown

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

第 3 步:在启用 GTID 的情况下重新启动两台服务器。  要使用全局事务标识符启用二进制日志记录,每个服务器必须以 GTID 模式启动,二进制日志记录,启用副本更新日志记录,并禁用对基于 GTID 的复制不安全的语句。此外,您应该通过以只读模式启动这两个服务器来防止在任何一个服务器上执行不需要的或意外的更新。这意味着两个服务器都必须(至少)启动以下 mysqld_safe调用中显示的选项:

$> mysqld_safe --gtid_mode=ON --log-bin --log-slave-updates --enforce-gtid-consistency &

此外,您应该使用 --skip-slave-start刚刚显示的示例中指定的选项以及其他服务器选项来启动副本。

笔记

gtid_mode不是布尔值,而是枚举。设置此选项时,使用其中一个值 ON或仅使用其中一个值。OFF使用 0 或 1 等数值可能会导致意外结果。

有关 gtid_modeenforce_gtid_consistency系统变量的更多信息,请参阅第 17.1.4.5 节,“全局事务 ID 选项和变量”

根据您的配置,为 mysqld_safe或其他 mysqld启动脚本提供其他选项。

第 4 步:指示副本使用源。  告诉副本使用复制源服务器作为数据源,并使用基于 GTID 的自动定位而不是基于文件的定位。在副本上执行 CHANGE MASTER TO语句,使用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 一起使用。尝试这样做会导致CHANGE MASTER TO语句失败并出现错误。

第 5 步:进行新备份。  既然您已经启用了 GTID,那么在您启用 GTID 之前所做的现有备份就不能再在这些服务器上使用。此时进行新的备份,这样您就不会没有可用的备份。

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

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

mysql> START SLAVE;

通过运行以下语句允许源再次开始接受更新:

mysql> SET @@GLOBAL.read_only = OFF;

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