#### 17.4.1.2从副本备份原始数据

为了保证复制的文件的完整性，在MySQL副本上备份原始数据文件时，副本服务器应该关闭。如果MySQL服务器仍在运行，则后台任务可能仍在更新数据库文件，尤其是那些涉及具有后台进程的存储引擎的任务，例如`InnoDB`具有`InnoDB`，这些问题应该在崩溃恢复期间解决，但由于副本服务器可以在备份过程中关闭，而不会影响源的执行，因此利用此功能是有意义的。

要关闭服务器并备份文件，请执行以下操作：

1.  关闭副本MySQL服务器：

    ```
    $> mysqladmin shutdown
    ```

2.  复制数据文件。您可以使用任何合适的复制或归档实用程序，包括**内容提供商**,**焦油**或**温齐普**。例如，假设数据目录位于当前目录下，您可以按如下方式存档整个目录：

    ```
    $> tar cf /tmp/dbbackup.tar ./data
    ```

3.  再次启动MySQL服务器。在Unix下：

    ```
    $> mysqld_safe &
    ```

    在Windows下：

    ```
    C:\> "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld"
    ```

    通常，您应该备份副本MySQL服务器的整个数据目录。如果您希望能够恢复数据并作为副本运行（例如，在副本出现故障的情况下），除了数据之外，还需要有副本的连接元数据存储库和applier元数据存储库，以及中继日志文件。恢复复制副本的数据后，恢复复制需要这些项目。假设复制副本的连接元数据存储库和applier元数据存储库使用了表（请参见[第17.2.4节，“中继日志和复制元数据存储库”](replica-logs.html))，这是MySQL 8.0中的默认值，这些表与数据目录一起备份。如果存储库使用了文件（不推荐使用），则必须单独备份这些文件。如果中继日志文件已放置在数据目录的其他位置，则必须单独备份它们。

    如果你丢失了中继日志，但仍然有`中继日志。信息`文件，您可以检查它以确定复制SQL线程在源的二进制日志中执行了多远。然后你可以使用[`将复制源更改为`](change-replication-source-to.html)语句（来自MySQL 8.0.23）或[`将主机更改为`](change-master-to.html)语句（MySQL 8.0.23之前）中的`源日志文件` \| `主日志文件`和`来源_日志_位置` \| `主日志位置`告诉复制副本从该点重新读取二进制日志的选项。这要求源服务器上仍然存在二进制日志。

    如果您的复制副本正在复制[`加载数据`](load-data.html)声明，你也应该备份任何`SQL_加载-*`复制副本用于此目的的目录中存在的文件。复制副本需要这些文件来恢复对任何中断数据的复制[`加载数据`](load-data.html)操作。此目录的位置是系统变量的值[`副本加载tmpdir`](replication-options-replica.html#sysvar_replica_load_tmpdir)（来自MySQL 8.0.26）或[`从机负载tmpdir`](replication-options-replica.html#sysvar_slave_load_tmpdir)（MySQL 8.0.26之前）。如果服务器不是使用该变量集启动的，则目录位置是[`tmpdir`](server-system-variables.html#sysvar_tmpdir)系统变量。
