19.1.2.6 设置副本
以下部分描述了如何设置副本。在继续之前,请确保您已经:
-
配置了源服务器所需的配置属性。请参阅第19.1.2.1节,“设置复制源配置”。
-
获取了源服务器的状态信息,或者在数据快照期间创建的二进制日志索引文件副本。请参阅第19.1.2.4节,“获取复制源二进制日志坐标”。
-
在源服务器上,释放读锁:
mysql> UNLOCK TABLES;
-
在副本服务器上,编辑MySQL配置。请参阅第19.1.2.2节,“设置副本配置”。
下一步操作取决于您是否需要将数据导入到副本服务器。如果您需要导入数据,请参阅第19.1.2.5节,“选择数据快照方法”。选择以下选项:
-
如果您没有数据快照,可以参阅第19.1.2.6.1节,“设置新源和副本”。
-
如果您有数据快照,可以参阅第19.1.2.6.2节,“设置已有数据副本”。
19.1.2.6.1 设置副本 with New Source and Replicas
如果没有数据快照,可以配置副本以从新源开始复制。
要设置副本之间的源和新副本:
-
启动副本。
-
在副本上执行
CHANGE REPLICATION SOURCE TO
语句,以设置源配置。请参阅第19.1.2.7节,“设置副本配置”。
在每个副本上执行这些设置步骤。
这也可以用于在新服务器上设置副本,但使用来自不同服务器的数据dump文件将数据加载到副本配置中。这样,数据将自动复制到副本服务器上。
如果您正在设置新复制环境,并且要使用来自不同现有数据库服务器的数据创建新源,运行来自该服务器的dump文件在新源上。数据库更新将自动传播到副本服务器:
$> mysql -h source < fulldb.dump
19.1.2.6.2 设置副本 with Existing Data
在设置复制与现有数据时,先将快照从源服务器复制到副本,然后启动复制。将数据导入副本的过程取决于您在源服务器上创建快照的方式。
要部署多个MySQL实例,可以使用InnoDB集群,它使您可以轻松管理一组MySQL服务器实例的MySQL Shell。InnoDB集群将MySQL Group Replication封装在一个程序环境中,使您可以轻松部署MySQL实例以实现高可用性。此外,InnoDB集群与MySQL Router无缝集成,使您的应用程序可以连接到集群而无需编写自己的故障转移过程。对于类似用例,但不需要高可用性,可以使用InnoDB ReplicaSet。MySQL Shell的安装指南可以在这里找到。
如果复制源服务器或您要复制的现有副本有计划事件,确保在创建新副本时禁用这些事件。如果事件在新副本上运行,但已经在源服务器上运行过,重复的操作将导致错误。事件调度器由event_scheduler
系统变量(默认为ON
)控制,因此在新副本启动时,原服务器上的活动事件将自动运行。要在新副本上停止所有事件,设置event_scheduler
系统变量为OFF
或DISABLED
,或者使用ALTER EVENT
语句将单个事件设置为DISABLE
或DISABLE ON REPLICA
以防止它们在新副本上运行。您可以使用SHOW
语句或信息_schemaEVENTS
表来列出服务器上的事件。更多信息,请见第19.5.1.16节,“Replication of Invoked Features”。
作为创建新副本的替代方法,MySQL Server的克隆插件可以将现有副本的所有数据和复制设置从源服务器复制到克隆。要使用该方法,请见第7.6.7.7节,“Cloning for Replication”。
按照以下步骤设置复制与现有数据:
-
如果您使用 MySQL 服务器的克隆插件从现有副本创建克隆(见第7.6.7.7节,“克隆复制”),数据已经被转移。否则,使用以下方法将数据导入副本。
-
如果您使用mysqldump,启动副本服务器,确保复制不启动,使用
--skip-replica-start
启动服务器。然后,导入备份文件:$> mysql < fulldb.dump
-
如果您使用原始数据文件创建快照,提取数据文件到副本的数据目录。例如:
$> tar xvf dbdump.tar
您可能需要设置文件权限和所有权,以便副本服务器可以访问和修改文件。然后,启动副本服务器,确保复制不启动,使用
--skip-replica-start
。
-
-
配置副本,以从源获取复制坐标。这样告诉副本,需要从源的二进制日志文件和文件位置开始复制。同时,配置副本,以源的登录凭证和主机名为准。关于
CHANGE REPLICATION SOURCE TO
语句的详细信息,见第19.1.2.7节,“设置副本配置”。 -
使用
START REPLICA
语句启动复制线程。
在执行该过程后,副本将连接到源并复制源上发生的所有更新。错误信息将被记录到副本的错误日志中,如果副本无法复制任何原因。
副本使用连接元数据存储库和应用程序元数据存储库来跟踪它已经处理的源二进制日志文件的部分。默认情况下,这些存储库是mysql数据库中的slave_master_info和slave_relay_log_info表。不要删除或编辑这些表,除非您知道自己在做什么,并且完全理解后果。即使在这种情况下,也建议使用CHANGE REPLICATION SOURCE TO
语句更改复制参数。副本将使用语句中的值自动更新复制元数据存储库。见第19.2.4节,“Relay Log and Replication Metadata Repositories”,了解更多信息。
复制服务器的连接元数据存储库将覆盖命令行或my.cnf
中指定的部分服务器选项。更多信息,请见第19.1.6节,“复制和二进制日志选项和变量”。
单个源快照足以满足多个复制服务器。要设置多个复制服务器,请使用同一个源快照,并按照前面描述的复制部分进行操作。