#### 17.1.2.6 设置副本

以下部分描述了如何设置副本。在继续之前，请确保您拥有：

-   使用必要的配置属性配置源。看[第 17.1.2.1 节，“设置复制源配置”](replication-howto-masterbaseconfig.html).

-   获取源状态信息，或在关闭数据快照期间生成的源二进制日志索引文件的副本。看[第 17.1.2.4 节，“获取复制源二进制日志坐标”](replication-howto-masterstatus.html).

-   在源码上，释放了读锁：

    ```
    mysql> UNLOCK TABLES;
    ```

-   在副本上，编辑 MySQL 配置。看[第 17.1.2.2 节，“设置副本配置”](replication-howto-slavebaseconfig.html).

    接下来的步骤取决于您是否有现有数据要导入到副本中。看[第 17.1.2.5 节，“选择数据快照的方法”](replication-snapshot-method.html)了解更多信息。选择以下选项之一：

-   如果您没有要导入的数据库快照，请参阅[第 17.1.2.6.1 节，“使用新源和副本设置复制”](replication-setup-replicas.html#replication-howto-newservers).

-   如果您有要导入的数据库快照，请参阅[第 17.1.2.6.2 节，“使用现有数据设置复制”](replication-setup-replicas.html#replication-howto-existingdata).

##### 17.1.2.6.1 使用新源和副本设置复制

如果没有要导入的先前数据库的快照，请将副本配置为从新源开始复制。

要在源和新副本之间设置复制：

1.  启动副本。

2.  执行一个[`将复制源更改为`](change-replication-source-to.html)\|[`将主更改为`](change-master-to.html)副本上的语句以设置源配置。看[第 17.1.2.7 节，“在副本上设置源配置”](replication-howto-slaveinit.html).

    在每个副本上执行这些副本设置步骤。

    如果您正在设置新服务器，但有来自不同服务器的现有数据库转储，并且您想要加载到您的复制配置中，也可以使用此方法。通过将数据加载到新源中，数据会自动复制到副本中。

    如果您要使用来自不同现有数据库服务器的数据来设置新的复制环境来创建新源，请在新源上运行从该服务器生成的转储文件。数据库更新会自动传播到副本：


```
$> mysql -h source < fulldb.dump
```

##### 17.1.2.6.2 使用现有数据设置复制

使用现有数据设置复制时，请在开始复制之前将快照从源传输到副本。将数据导入副本的过程取决于您在源上创建数据快照的方式。

提示

要部署多个 MySQL 实例，您可以使用[InnoDB 集群](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-innodb-cluster.html)这使您能够轻松地管理一组 MySQL 服务器实例[MySQL 外壳](https://dev.mysql.com/doc/mysql-shell/8.0/en/).InnoDB Cluster 将 MySQL 组复制包装在一个编程环境中，使您能够轻松部署 MySQL 实例集群以实现高可用性。此外，InnoDB Cluster 与[MySQL 路由器](https://dev.mysql.com/doc/mysql-router/8.0/en/)，这使您的应用程序无需编写自己的故障转移过程即可连接到集群。但是，对于不需要高可用性的类似用例，您可以使用[InnoDB 副本集](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-innodb-replicaset.html).可以找到 MySQL Shell 的安装说明[这里](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-install.html).

笔记

如果要复制以创建新副本的复制源服务器或现有副本具有任何计划事件，请确保在启动新副本之前禁用这些事件。如果事件在源上已运行的新副本上运行，则重复操作会导致错误。事件调度程序由[`event_scheduler`](server-system-variables.html#sysvar_event_scheduler)系统变量，默认为`在`从 MySQL 8.0 开始，因此在原始服务器上处于活动状态的事件默认在新副本启动时运行。要停止所有事件在新副本上运行，请将[`event_scheduler`](server-system-variables.html#sysvar_event_scheduler)系统变量为`离开`要么`已禁用`在新副本上。或者，您可以使用[`改变事件`](alter-event.html)将单个事件设置为的语句`禁用`要么`禁用从属`以防止它们在新副本上运行。您可以使用[`显示`](show.html)声明或信息模式[`活动`](information-schema-events-table.html)桌子。有关详细信息，请参阅[第 17.5.1.16 节，“调用功能的复制”](replication-features-invoked.html).

作为以这种方式创建新副本的替代方法，MySQL Server 的克隆插件可用于将所有数据和复制设置从现有副本传输到克隆。有关使用此方法的说明，请参阅[第 5.6.7.7 节，“复制克隆”](clone-plugin-replication.html).

按照以下过程使用现有数据设置复制：

1.  如果您使用 MySQL 服务器的克隆插件从现有副本创建克隆（请参阅[第 5.6.7.7 节，“复制克隆”](clone-plugin-replication.html))，数据已经传输。否则，请使用以下方法之一将数据导入副本。

    1.  如果你用过[**mysql转储**](mysqldump.html), 启动副本服务器，确保复制不会通过使用[`--skip-slave-启动`](replication-options-replica.html#option_mysqld_skip-slave-start)选项，或者从 MySQL 8.0.24 开始，[`skip_slave_start`](replication-options-replica.html#sysvar_skip_slave_start)系统变量。然后导入转储文件：

        ```
        $> mysql < fulldb.dump
        ```

    2.  如果您使用原始数据文件创建了快照，请将数据文件提取到副本的数据目录中。例如：

        ```
        $> tar xvf dbdump.tar
        ```

        您可能需要设置文件的权限和所有权，以便副本服务器可以访问和修改它们。然后启动副本服务器，确保复制不会通过使用[`--skip-slave-启动`](replication-options-replica.html#option_mysqld_skip-slave-start)选项，或者从 MySQL 8.0.24 开始，[`skip_slave_start`](replication-options-replica.html#sysvar_skip_slave_start)系统变量。

2.  使用来自源的复制坐标配置副本。这告诉副本二进制日志文件和文件中需要开始复制的位置。此外，使用源的登录凭据和主机名配置副本。有关更多信息[`将复制源更改为`](change-replication-source-to.html)\|[`将主更改为`](change-master-to.html)需要声明，见[第 17.1.2.7 节，“在副本上设置源配置”](replication-howto-slaveinit.html).

3.  通过发出一个启动复制线程[`开始复制`](start-replica.html)（或在 MySQL 8.0.22 之前，[`启动奴隶`](start-replica.html)） 陈述。

    执行此过程后，副本将连接到源并复制自拍摄快照以来在源上发生的任何更新。如果由于任何原因无法复制，则会向副本的错误日志发出错误消息。

    副本使用记录在其连接元数据存储库和应用程序元数据存储库中的信息来跟踪它已经处理了多少源二进制日志。从 MySQL 8.0 开始，默认情况下，这些存储库是名为`slave_master_info`和`slave_relay_log_info`在里面`mysql`数据库。做*不是*除非您确切知道自己在做什么并完全理解其含义，否则请删除或编辑这些表格。即使在这种情况下，您也最好使用[`将复制源更改为`](change-replication-source-to.html)\|[`将主更改为`](change-master-to.html)更改复制参数的语句。副本使用语句中指定的值自动更新复制元数据存储库。看[第 17.2.4 节，“中继日志和复制元数据存储库”](replica-logs.html)， 了解更多信息。

笔记

副本的连接元数据存储库的内容会覆盖在命令行或在`我的.cnf`.看[第 17.1.6 节，“复制和二进制日志记录选项和变量”](replication-options.html)， 更多细节。

源的单个快照足以用于多个副本。要设置其他副本，请使用相同的源快照并按照刚刚描述的过程的副本部分进行操作。
