10bet网址
MySQL复制
相关的文档10bet官方网站 下载节选
PDF(美国Ltr)- 1.7 mb
PDF (A4)- 1.7 mb


2.2.8向复制环境中添加副本

您可以在不停止源服务器的情况下向现有复制配置添加另一个副本。为此,您可以通过复制现有副本的数据目录,并为新副本提供不同的服务器ID(这是用户指定的)和服务器UUID(这是在启动时生成的)来设置新的副本。

请注意

如果要复制以创建新副本的复制源服务器或现有副本有任何计划事件,请确保在启动新副本之前禁用这些计划事件。如果事件在已经在源上运行的新副本上运行,重复的操作将导致错误。控件控制事件调度器event_scheduler系统变量,默认为因此,当新的副本启动时,原服务器上的活动事件默认运行。若要停止在新副本上运行所有事件,请设置event_scheduler系统变量为禁用在新的副本上。或者,您也可以使用改变事件语句将单个事件设置为禁用禁用从服务器以防止它们在新的副本上运行。方法可以列出服务器上的事件显示语句或信息模式事件表格有关更多信息,请参见第4.1.16节,“被调用特性的复制”

作为一种创建新副本的替代方法,MySQL Server的克隆插件可以用来将所有数据和复制设置从现有副本转移到克隆。有关使用此方法的说明,请参见克隆复制

要复制一个现有副本而不进行克隆,请执行以下步骤:

  1. 停止现有的副本并记录副本状态信息,特别是源二进制日志文件和中继日志文件的位置。您可以在性能模式复制表中查看副本状态(参见性能模式复制表)或发行显示副本状态如下:

    mysql STOP SLAVE;mysql> SHOW SLAVE STATUS\G from mysql 8.0.22: mysql> STOP REPLICA;显示复制状态\G
  2. 关闭现有副本:

    Shell > mysqladmin shutdown
  3. 将数据目录从现有副本复制到新副本,包括日志文件和中继日志文件。您可以通过使用焦油WinZip,或直接复制使用工具,例如cprsync

    重要的
    • 在复制之前,请验证与现有副本相关的所有文件实际上都存储在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-bin.如果不可能,则将现有副本的中继日志索引文件复制到新副本,并设置relay_log_index新副本上的系统变量,以匹配现有副本上使用的系统变量。如果未在现有副本上显式设置此选项,则使用existing_replica_hostname-relay-bin.index.或者,如果您在完成本节其余步骤之后已经尝试启动新的副本,并且遇到了类似于前面描述的错误,那么执行以下步骤:

    1. 如果您还没有这样做,发出停止复制在新的副本上。

      如果您已经再次启动了现有的副本,则发出停止复制在现有的副本上也是如此。

    2. 将现有副本的中继日志索引文件的内容复制到新副本的中继日志索引文件中,确保覆盖文件中已经存在的任何内容。

    3. 继续执行本节中的其余步骤。

  4. 复制完成后,重新启动现有副本。

  5. 在新副本上,编辑配置并为新副本提供惟一的服务器ID(使用server_id系统变量),该变量不被源或任何现有副本使用。

  6. 属性启动新的复制服务器,确保复制尚未启动——skip-slave-start选项,或从MySQL 8.0.24skip_slave_start系统变量。使用性能模式复制表或问题显示副本状态确认新副本与现有副本相比具有正确的设置。还要显示服务器ID和服务器UUID,并验证它们对于新副本是正确的和惟一的。

  7. 命令启动复制线程开始复制声明。新的副本现在使用其连接元数据存储库中的信息来启动复制过程。