将从站添加到复制环境
您可以在不停止主服务器的情况下将另一个从服务器添加到现有的复制配置中。为此,您可以通过复制现有从服务器的数据目录来设置新的从服务器,并为新的从服务器提供不同的服务器ID(由用户指定)和服务器UUID(在启动时生成)。
要复制现有从站:
停止现有的从站并记录从站状态信息,尤其是主二进制日志文件和中继日志文件的位置。您可以在Performance Schema复制表(请参见“ Performance Schema Replication Tables”)中或通过发出
SHOW SLAVE STATUS
以下命令参见从属状态:mysql>
STOP SLAVE ; mysql>SHOW SLAVE STATUS \G关闭现有的奴隶:
shell>
mysqladmin shutdown将数据目录从现有从站复制到新的从站,包括日志文件和中继日志文件。您可以通过使用tar或创建归档文件
WinZip
,或使用诸如cp或rsync之类的工具执行直接复制来执行此操作。重要
- 复制之前,请确认与现有从站有关的所有文件实际上都存储在数据目录中。例如,
InnoDB
系统表空间,撤消表空间和重做日志可能存储在备用位置。InnoDB
表空间文件和每表文件表空间可能是在其他目录中创建的。从站的二进制日志和中继日志可能位于数据目录之外的其自己的目录中。检查为现有从站设置的系统变量,并查找已指定的任何替代路径。如果找到任何目录,也请复制这些目录。 - 复制期间,如果文件已用于主信息和中继日志信息存储库(请参见“复制中继和状态日志”),请确保还将这些文件也从现有的从服务器复制到新的从服务器。如果将表用于存储库(这是MySQL 8.0的默认设置),则表位于data目录中。
- 复制后,
auto.cnf
从新从服务器上的数据目录的副本中删除文件,以便使用其他生成的服务器UUID启动新从服务器。服务器UUID必须是唯一的。
添加新的复制从属服务器时遇到的一个常见问题是,新的从属服务器失败,并显示一系列警告和错误消息,如下所示:
071118 16:44:10 [Warning] Neither --relay-log nor --relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use '--relay-log=new_slave_hostname-relay-bin' to avoid this problem. 071118 16:44:10 [ERROR] Failed to open the relay log './old_slave_hostname-relay-bin.003525' (relay_log_pos 22940879) 071118 16:44:10 [ERROR] Could not find target log during relay log initialization 071118 16:44:10 [ERROR] Failed to initialize the master info structure
如果
relay_log
未指定系统变量,则会发生这种情况,因为中继日志文件包含主机名作为其文件名的一部分。如果relay_log_index
不使用系统变量,则中继日志索引文件也是如此。有关这些变量的更多信息,请参见“复制和二进制日志记录选项和变量”。为避免此问题,请
relay_log
在新的从站上使用与现有从站上相同的值。如果未在现有从站上显式设置此选项,请使用existing_slave_hostname-relay-bin
。如果无法做到这一点,则将现有从站的中继日志索引文件复制到新的从站,并在新的从站上设置relay_log_index
系统变量以匹配现有从站上使用的系统变量。如果未在现有从站上显式设置此选项,请使用existing_slave_hostname-relay-bin.index
。或者,如果您已按照本节中的其余步骤尝试启动新的从属服务器,并且遇到了如前所述的错误,请执行以下步骤:如果尚未这样做,请
STOP SLAVE
在新的从站上发布。如果您已经重新启动了现有的从站,请
STOP SLAVE
在现有的从站上进行发行。- 将现有从站的中继日志索引文件的内容复制到新的从站的中继日志索引文件中,确保覆盖文件中已存在的所有内容。
- 继续执行本节中的其余步骤。
- 复制之前,请确认与现有从站有关的所有文件实际上都存储在数据目录中。例如,
- 复制完成后,重新启动现有的从站。
- 在新的从属服务器上,编辑配置,并为新的从属服务器赋予唯一的服务器ID(使用
server_id
系统变量),该服务器ID 不会被主服务器或任何现有的从属服务器使用。 - 启动新的从属服务器,并指定
--skip-slave-start
选项以使复制尚未开始。使用性能架构复制表或发出命令,SHOW SLAVE STATUS
以确认新的从属服务器与现有的从属服务器具有正确的设置。还显示服务器ID和服务器UUID,并验证它们对于新的从属服务器正确且唯一。 通过发出一条
START SLAVE
语句来启动从属线程:mysql>
START SLAVE ;现在,新的从服务器将使用其主信息存储库中的信息来启动复制过程。