使用GTID设置复制
本节介绍了在MySQL 8.0中配置和启动基于GTID的复制的过程。这是一个“冷启动”过程,假定您是第一次启动复制母版,或者可以停止它。有关使用来自正在运行的主服务器的GTID来配置复制从服务器的信息,请参见“使用GTID进行故障转移和横向扩展”。有关在线更改服务器上GTID模式的信息,请参见“更改在线服务器上的复制模式”。
对于一个由一个主节点和一个从属节点组成的最简单的GTID复制拓扑,此启动过程中的关键步骤如下:
- 如果复制已经在运行,则通过将它们设置为只读来同步两个服务器。
- 停止两个服务器。
重新启动两个启用了GTID并配置了正确选项的服务器。
在本节后面的示例中讨论了如上所述启动服务器所需的mysqld选项。
- 指示从属服务器将主服务器用作复制数据源并使用自动定位。本节后面的示例中描述了完成此步骤所需的SQL语句。
- 进行新的备份。包含没有GTID的事务的二进制日志不能在启用了GTID的服务器上使用,因此在此之前进行的备份不能与新配置一起使用。
- 启动从属服务器,然后在两台服务器上禁用只读模式,以便它们可以接受更新。
在下面的示例中,两个服务器已经使用MySQL的基于二进制日志位置的复制协议作为主服务器和从服务器运行。如果要从新服务器开始,请参见“创建用于复制的用户”以获取有关为复制连接添加特定用户的信息,以及请参见第17.1.2.1 节“设置复制主配置”以获取有关设置server_id
变量的信息。。以下示例显示了如何在服务器的选项文件中存储mysqld启动选项,有关更多信息,请参见“使用选项文件”。或者,您可以在运行mysqld时使用启动选项。
遵循的大多数步骤要求使用MySQL root
帐户或具有SUPER
特权的另一个MySQL用户帐户。mysqladminshutdown
需要SUPER
特权或SHUTDOWN
特权。
步骤1:同步服务器。仅当使用已经复制而不使用GTID的服务器时,才需要执行此步骤。对于新服务器,请继续执行步骤3。通过发出以下read_only
命令ON
,将每个服务器上的系统变量设置为,使服务器成为只读服务器:
mysql>SET @@GLOBAL.read_only =ON ;
等待所有正在进行的事务提交或回滚。然后,让从机赶上主机。在继续之前,确保从站已处理所有更新,这一点非常重要。
如果您将二进制日志用于复制以外的其他用途,例如进行时间点备份和还原,请等到不再需要包含没有GTID的事务的旧二进制日志。理想情况下,请等待服务器清除所有二进制日志,然后等待任何现有备份到期。
重要重要的是要了解,包含没有GTID的事务的日志不能在启用了GTID的服务器上使用。在继续之前,必须确保没有GTID的事务在拓扑中的任何地方都不存在。
步骤2:停止两台服务器。如下所示,使用mysqladmin停止每个服务器,其中username
是具有足够特权关闭服务器的MySQL用户的用户名:
shell>mysqladmin -uusername -p shutdown
然后在提示时提供该用户的密码。
步骤3:启动两个启用了GTID的服务器。要启用基于GTID的复制,必须通过将gtid_mode
变量设置为来启用每个GTID模式的服务器ON
,并enforce_gtid_consistency
启用该变量,以确保仅记录对基于GTID的复制安全的语句。例如:
gtid_mode=ON enforce-gtid-consistency=ON
此外,--skip-slave-start
在配置从站设置之前,应使用该选项启动从站。有关GTID相关选项和变量的更多信息,请参见“全局事务ID系统变量”。
在使用mysql.gtid_executed Table时,并非强制启用二进制日志记录以使用GTID 。主服务器必须始终启用二进制日志记录才能进行复制。但是,从属服务器可以使用GTID,但不使用二进制日志记录。如果需要在从属服务器上禁用二进制日志记录,可以通过为从属服务器指定--skip-log-bin
and --log-slave-updates=OFF
选项来实现。
步骤4:配置从站以使用基于GTID的自动定位。告诉从服务器使用具有基于GTID的事务的主服务器作为复制数据源,并使用基于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:启动从站并禁用只读模式。像这样启动slave:
mysql>START SLAVE ;
仅当在步骤1中将服务器配置为只读时,才需要执行以下步骤。要使服务器再次开始接受更新,请发出以下语句:
mysql>SET @@GLOBAL.read_only = OFF;
基于GTID的复制现在应该正在运行,并且您可以像以前一样在主服务器上开始(或恢复)活动。“使用GTID进行故障转移和横向扩展”讨论了在使用GTID时创建新的从服务器。