您可以在不停止源服务器的情况下向现有复制配置添加另一个副本。为此,您可以通过复制现有副本的数据目录,并为新副本提供不同的服务器ID(这是用户指定的)和服务器UUID(这是在启动时生成的)来设置新的副本。
如果要复制以创建新副本的复制源服务器或现有副本有任何计划事件,请确保在启动新副本之前禁用这些计划事件。如果事件在已经在源上运行的新副本上运行,重复的操作将导致错误。控件控制事件调度器event_scheduler
系统变量,默认为在
因此,当新的副本启动时,原服务器上的活动事件默认运行。若要停止在新副本上运行所有事件,请设置event_scheduler
系统变量为从
或禁用
在新的副本上。或者,您也可以使用改变事件
语句将单个事件设置为禁用
或禁用从服务器
以防止它们在新的副本上运行。方法可以列出服务器上的事件显示
语句或信息模式事件
表格有关更多信息,请参见第4.1.16节,“被调用特性的复制”.
作为一种创建新副本的替代方法,MySQL Server的克隆插件可以用来将所有数据和复制设置从现有副本转移到克隆。有关使用此方法的说明,请参见克隆复制.
要复制一个现有副本而不进行克隆,请执行以下步骤:
停止现有的副本并记录副本状态信息,特别是源二进制日志文件和中继日志文件的位置。您可以在性能模式复制表中查看副本状态(参见性能模式复制表)或发行
显示副本状态
如下:mysql STOP SLAVE;mysql> SHOW SLAVE STATUS\G from mysql 8.0.22: mysql> STOP REPLICA;显示复制状态\G
关闭现有副本:
Shell > mysqladmin shutdown
将数据目录从现有副本复制到新副本,包括日志文件和中继日志文件。您可以通过使用焦油或
WinZip
,或直接复制使用工具,例如cp或rsync.重要的在复制之前,请验证与现有副本相关的所有文件实际上都存储在data目录中。例如,
InnoDB
系统表空间、撤消表空间和重做日志可能存储在另一个位置。InnoDB
表空间文件和每表一个文件的表空间可能已经在其他目录中创建。副本的二进制日志和中继日志可能位于数据目录之外的它们自己的目录中。检查为现有副本设置的系统变量,查找已指定的任何替代路径。如果找到了,也复制这些目录。在复制期间,如果文件已用于复制元数据存储库(请参阅第5.4节“中继日志和复制元数据存储库”),确保您也将这些文件从现有副本复制到新的副本。如果存储库使用了表(这是MySQL 8.0的默认设置),则表位于data目录中。
拷贝完成后,删除
auto.cnf
从新副本上的data目录的副本中获取文件,以便新副本以不同的生成的服务器UUID启动。服务器UUID不能重复。
添加新副本时遇到的一个常见问题是,新副本失败,并出现如下一系列警告和错误消息:
071118 16:44:10 [Warning]没有使用——relay-log和——relay-log-index;所以当这个MySQL服务器作为一个副本并改变了他的主机名时,复制可能会中断!!请使用“——relay-log=”new_replica_hostname-relay-bin'来避免这个问题。071118 16:44:10 [ERROR] Failed to open the relay log './old_replica_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]初始化主信息结构失败
可能发生这种情况,如果
relay_log
没有指定系统变量,因为中继日志文件在文件名中包含主机名。中继日志索引文件也是如此relay_log_index
未使用系统变量。有关这些变量的更多信息,请参见第2.6节“复制和二进制日志选项和变量”.为了避免这个问题,使用相同的值
relay_log
在现有副本上使用的新副本上。如果未在现有副本上显式设置此选项,则使用
.如果不可能,则将现有副本的中继日志索引文件复制到新副本,并设置existing_replica_hostname
-relay-binrelay_log_index
新副本上的系统变量,以匹配现有副本上使用的系统变量。如果未在现有副本上显式设置此选项,则使用
.或者,如果您在完成本节其余步骤之后已经尝试启动新的副本,并且遇到了类似于前面描述的错误,那么执行以下步骤:existing_replica_hostname
-relay-bin.index复制完成后,重新启动现有副本。
在新副本上,编辑配置并为新副本提供惟一的服务器ID(使用
server_id
系统变量),该变量不被源或任何现有副本使用。属性启动新的复制服务器,确保复制尚未启动
——skip-slave-start
选项,或从MySQL 8.0.24skip_slave_start
系统变量。使用性能模式复制表或问题显示副本状态
确认新副本与现有副本相比具有正确的设置。还要显示服务器ID和服务器UUID,并验证它们对于新副本是正确的和惟一的。命令启动复制线程
开始复制
声明。新的副本现在使用其连接元数据存储库中的信息来启动复制过程。