

# 将数据导入 Amazon RDS for MySQL 数据库实例并减少停机时间
<a name="mysql-importing-data-reduced-downtime"></a>

有时，您可能需要将数据从支持活动应用程序的外部 MySQL 数据库导入到 RDS for MySQL 数据库实例或 RDS for MySQL 多可用区数据库集群。使用以下过程可最大程度地减小对应用程序可用性产生的影响。如果使用非常大的数据库，该步骤也很有用。使用该过程，您可以通过减少跨网络传送到 AWS 的数据量以降低导入成本。

在该过程中，您将数据库数据的副本传输到 Amazon EC2 实例，并将数据导入到新的 Amazon RDS 数据库中。然后，使用复制功能使 Amazon RDS 数据库与活动的外部实例保持同步，再将应用程序重新导向到 Amazon RDS 数据库。基于二进制日志坐标配置复制。

**注意**  
如果您想要将数据导入到 RDS for MySQL 数据库实例中且您的方案支持此操作，则建议使用备份文件和 Amazon S3 将数据移入和移出 Amazon RDS。有关更多信息，请参阅 [将备份还原到 Amazon RDS for MySQL 数据库实例](MySQL.Procedural.Importing.md)。

下图显示将外部 MySQL 数据库导入到 Amazon RDS 上的 MySQL 数据库。

![\[显示将外部 MySQL 数据库导入到 Amazon RDS 上的 MySQL 数据库的工作流程。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_1.png)


## 任务 1：创建现有数据库的副本
<a name="mysql-importing-data-reduced-downtime-copy-database"></a>

要以尽可能少的停机时间将大量数据迁移到 RDS for MySQL 数据库，第一步是创建源数据的副本。

下图显示了创建 MySQL 数据库的备份。

![\[显示创建 MySQL 数据库的备份的工作流程。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_2.png)


您可以使用 `mysqldump` 实用程序创建 SQL 或分隔的文本格式的数据库备份。建议您在非生产环境中对每种格式运行测试，以便了解哪种方法能最大程度地减少 `mysqldump` 运行的时间。

我们还建议您对照将分隔文本格式用于加载所获得的好处来权衡 `mysqldump` 性能。使用分隔的文本格式的备份将为所转储的每个表创建制表符分隔的文本文件。为减少导入数据库所需的时间，您可以使用 `LOAD DATA LOCAL INFILE` 命令并行加载这些文件。有关更多信息，请参阅“从任意来源导入数据”过程中的[步骤 5：加载数据](mysql-importing-data-any-source.md#mysql-importing-data-any-source-load-data)。

在开始备份操作之前，确保对将复制到 Amazon RDS 的 MySQL 数据库设置复制选项。复制选项包括开启二进制日志记录和设置唯一的服务器 ID。设置这些选项将促使您的服务器开始记录数据库事务，并做好在该过程的后面充当源复制实例的准备。

确保您了解以下建议和注意事项：
+ 将 `--single-transaction` 选项与 `mysqldump` 结合使用，因为它会转储数据库的一致状态。为确保转储文件有效，请勿在 `mysqldump` 运行时运行数据定义语言 (DDL) 语句。您可以为这些操作计划维护时段。
+ 从转储文件中排除以下架构：
  + `sys`
  + `performance_schema`
  + `information_schema`

  默认情况下，`mysqldump` 实用工程序包括这些架构。
+ 如果您需要迁移用户和权限，请考虑使用生成数据控制语言 (DCL) 的工具 (如 [pt-show-grants](https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html) 实用程序) 来重新创建用户和权限。

### 设置复制选项
<a name="mysql-importing-data-reduced-downtime-set-replication-options"></a>

1. 编辑 `my.cnf` 文件。此文件通常位于 `/etc` 下。

   ```
   sudo vi /etc/my.cnf
   ```

   将 `log_bin` 和 `server_id` 选项添加到 `[mysqld]` 节。`log_bin` 选项为二进制日志文件提供文件名标识符。`server_id` 选项为源-副本关系中的服务器提供唯一标识符。

   以下示例显示 `my.cnf` 文件已更新的 `[mysqld]` 部分：

   ```
   [mysqld]
   log-bin=mysql-bin
   server-id=1
   ```

   有关更多信息，请参阅 MySQL 文档中的 [Setting the Replication Source Configuration](https://dev.mysql.com/doc/refman/8.4/en/replication-howto-masterbaseconfig.html)。

1. 要使用多可用区数据库集群进行复制，请将 `ENFORCE_GTID_CONSISTENCY` 和 `GTID_MODE` 参数设置为 `ON`。

   ```
   mysql> SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
   ```

   ```
   mysql> SET @@GLOBAL.GTID_MODE = ON;
   ```

   使用数据库实例进行复制不需要这些设置。

1. 重新启动 `mysql` 服务。

   ```
   sudo service mysqld restart
   ```

### 创建现有数据库的备份副本
<a name="mysql-importing-data-reduced-downtime-create-backup"></a>

1. 使用 `mysqldump` 实用程序创建数据备份，并指定 SQL 或分隔的文本格式。

   对于 MySQL 8.0.25 及更低版本，指定 `--master-data=2` 以创建可用于启动服务器间复制的备份文件。对于 MySQL 8.0.26 及更高版本，指定 `--source-data=2` 以创建可用于启动服务器间复制的备份文件。有关更多信息，请参阅 MySQL 文档中的 [mysqldump — A Database Backup Program](https://dev.mysql.com/doc/refman/8.4/en/mysqldump.html)。

   要提高性能和确保数据完整性，请对于 `mysqldump` 使用 `--order-by-primary` 和 `--single-transaction` 选项。

   要避免在备份中包括 MySQL 系统数据库，请不要将 `--all-databases` 选项与 `mysqldump` 结合使用。有关更多信息，请参阅 MySQL 文档中的 [Creating a Data Snapshot Using mysqldump](https://dev.mysql.com/doc/mysql-replication-excerpt/8.0/en/replication-howto-mysqldump.html)。

   如有必要，可使用 `chmod` 来确保要在其中创建备份文件的目录是可写的。
**重要**  
在 Windows 中，以管理员身份运行命令窗口。
   + 要生成 SQL 输出，请使用以下命令：

     对于 Linux、macOS 或 Unix：

     ```
     sudo mysqldump \
         --databases database_name \
         --master-data=2  \
         --single-transaction \
         --order-by-primary \
         -r backup.sql \
         -u local_user \
         -ppassword
     ```
**注意**  
作为安全最佳实践，请指定示例中显示的提示以外的凭证。

     对于：Windows

     ```
     mysqldump ^
         --databases database_name ^
         --master-data=2  ^
         --single-transaction ^
         --order-by-primary ^
         -r backup.sql ^
         -u local_user ^
         -ppassword
     ```
**注意**  
作为安全最佳实践，请指定示例中显示的提示以外的凭证。
   + 要生成分隔文本输出，请使用以下命令：

     对于 Linux、macOS 或 Unix：

     ```
     sudo mysqldump \
         --tab=target_directory \
         --fields-terminated-by ',' \
         --fields-enclosed-by '"' \
         --lines-terminated-by 0x0d0a \
         database_name \
         --master-data=2 \
         --single-transaction \
         --order-by-primary \
         -ppassword
     ```

     对于：Windows

     ```
     mysqldump ^
         --tab=target_directory ^
         --fields-terminated-by "," ^
         --fields-enclosed-by """ ^
         --lines-terminated-by 0x0d0a ^
         database_name ^
         --master-data=2 ^
         --single-transaction ^
         --order-by-primary ^
         -ppassword
     ```
**注意**  
作为安全最佳实践，请指定示例中显示的提示以外的凭证。  
确保在 Amazon RDS 数据库中手动创建任何存储过程、触发器、函数或事件。如果您所复制的数据库中有上述任一对象，则在运行 `mysqldump` 时排除这些对象。为此，请在 `mysqldump` 命令中包含以下参数：  
`--routines=0`
`--triggers=0`
`--events=0`

     对于 MySQL 8.0.22 及更低版本，当您运行 `mysqldump` 并指定分隔文本格式时，将返回 `CHANGE MASTER TO` 注释。此注释包含主日志文件名称和位置。对于 MySQL 8.0.23 及更高版本，如果您使用分隔文本格式运行 `mysqldump`，将返回 `CHANGE REPLICATION SOURCE TO` 注释。此注释包含源日志文件名称和位置。如果外部实例是 MySQL 8.0.23 及更高版本，请注意 `MASTER_LOG_FILE` 和 `MASTER_LOG_POS` 的值。设置复制时需要这些值。

     对于 MySQL 8.0.22 及更低版本，将返回以下输出：

     ```
     -- Position to start replication or point-in-time recovery from
     --
     -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin-changelog.000031', MASTER_LOG_POS=107;
     ```

     对于 MySQL 8.0.23 及更高版本，将返回以下输出：

     ```
     -- Position to start replication or point-in-time recovery from
     --
     -- CHANGE SOURCE TO SOURCE_LOG_FILE='mysql-bin-changelog.000031', SOURCE_LOG_POS=107;
     ```

     对于 MySQL 8.0.22 及更低版本，如果您使用的是 SQL 格式，则可以在备份文件的 `CHANGE MASTER TO` 注释中获得主日志文件名称和位置。对于 MySQL 8.0.23 及更高版本，如果您使用的是 SQL 格式，则可以在备份文件的 `CHANGE REPLICATION SOURCE TO` 注释中获得源日志文件名称和位置。

1. 压缩复制后的数据可减少将数据复制到 Amazon RDS 数据库所需的网络资源量。记下备份文件的大小。您在确定要创建的 Amazon EC2 实例的大小时需要此信息。完成操作后，请使用 GZIP 或您的首选压缩实用程序来压缩备份文件。
   + 要压缩 SQL 输出，请使用以下命令：

     ```
     gzip backup.sql
     ```
   + 要压缩分隔文本输出，请使用以下命令：

     ```
     tar -zcvf backup.tar.gz target_directory
     ```

## 任务 2：创建 Amazon EC2 实例和复制压缩的数据库
<a name="mysql-importing-data-reduced-downtime-create-ec2-copy-database"></a>

将压缩的数据库备份文件复制到 Amazon EC2 实例所占用的网络资源少于直接在数据库实例之间复制未压缩的数据所占用的网络资源。当您的数据位于 Amazon EC2 中后，可以直接从中将数据复制到 MySQL 数据库。要节省网络资源成本，您的 Amazon EC2 实例必须与 Amazon RDS 数据库实例位于同一 AWS 区域内。使 Amazon EC2 实例位于 Amazon RDS 数据库所在的相同 AWS 区域内，还可以减少导入期间的网络延迟。

下图显示了将数据库备份复制到 Amazon EC2 实例。

![\[显示将数据库备份复制到 Amazon EC2 实例的工作流程。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_3.png)


### 创建 Amazon EC2 实例并复制数据
<a name="mysql-importing-data-reduced-downtime-create-ec2"></a>

1. 在您打算在其中创建 Amazon RDS 数据库的 AWS 区域中，创建虚拟私有云（VPC）、VPC 安全组和 VPC 子网。确保您的 VPC 安全组的入站规则允许应用程序连接到 AWS 所需的 IP 地址。您可以指定一系列 IP 地址（例如 `203.0.113.0/24`）或另一个 VPC 安全组。可以使用 [Amazon VPC 控制台](https://console.aws.amazon.com/vpc)来创建和管理 VPC、子网和安全组。有关更多信息，请参阅《Amazon Virtual Private Cloud 用户指南》**中的 [Amazon VPC 入门](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html#getting-started)。

1. 打开 [Amazon EC2 控制台](https://console.aws.amazon.com/ec2)，并选择将包含 Amazon EC2 实例和 Amazon RDS 数据库的 AWS 区域。使用您在步骤 1 中创建的 VPC、子网和安全组来启动 Amazon EC2 实例。在数据库备份文件未压缩的情况下，确保为该文件选择具有足够存储空间的实例类型。有关 Amazon EC2 实例的详细信息，请参阅《Amazon Elastic Compute Cloud 用户指南》**中的[开始使用 Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)。

1. 要从 Amazon EC2 实例连接到 Amazon RDS 数据库，请编辑 VPC 安全组。添加指定 EC2 实例的私有 IP 地址的入站规则。您可以在 EC2 控制台窗口中的 **Instance** 窗格的 **Details** 选项卡上找到私有 IP 地址。要编辑 VPC 安全组并添加入站规则，请在 EC2 控制台导航窗格中选择 **Security Groups**（安全组），然后为 MySQL 或 Aurora 添加指定 EC2 实例的私有 IP 地址的入站规则。要了解如何向 VPC 安全组添加入站规则，请参阅《Amazon Virtual Private Cloud 用户指南》**中的[安全组规则](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)。

1. 将压缩后的数据库备份文件从本地系统复制到 Amazon EC2 实例中。如有必要，可使用 `chmod` 来确保您具有 Amazon EC2 实例目标目录的写入权限。您可以使用 `scp` 或 Secure Shell (SSH) 客户端复制文件。以下命令是一个示例 `scp` 命令：

   ```
   scp -r -i key pair.pem backup.sql.gz ec2-user@EC2 DNS:/target_directory/backup.sql.gz
   ```
**重要**  
复制敏感数据时，务必使用安全网络传输协议。

1. 连接到 Amazon EC2 实例，并使用以下命令安装最新更新和 MySQL 客户端工具：

   ```
   sudo yum update -y
   sudo yum install mysql -y
   ```

   有关更多信息，请参阅《Amazon Elastic Compute Cloud 用户指南》**中的[连接到您的实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-connect-to-instance-linux)（适用于 Linux 实例）。
**重要**  
此示例介绍了如何在适用于 Amazon Linux 发行版的 Amazon Machine Image (AMI) 上安装 MySQL 客户端。此示例不在其它发行版（例如 Ubuntu 或 Red Hat Enterprise Linux）上安装 MySQL 客户端。有关安装 MySQL 的信息，请参阅 MySQL 文档中的 [Installing MySQL](https://dev.mysql.com/doc/refman/8.4/en/installing.html)。

1. 在连接到 Amazon EC2 实例时，请解压缩数据库备份文件。下面是一些命令示例。
   + 要解压缩 SQL 输出，请使用以下命令：

     ```
     gzip backup.sql.gz -d
     ```
   + 要解压缩分隔的文本输出，请使用以下命令：

     ```
     tar xzvf backup.tar.gz
     ```

## 任务 3：创建 MySQL 数据库，并从 Amazon EC2 实例导入数据
<a name="mysql-importing-data-reduced-downtime-create-database-import-data"></a>

通过在 Amazon EC2 实例所在的同一 AWS 区域中创建 RDS for MySQL 数据库实例或 RDS for MySQL 多可用区数据库集群，与通过互联网相比，可以更快地从 Amazon EC2 导入数据库备份文件。

下图显示了将备份从 Amazon EC2 实例导入到 MySQL 数据库。

![\[显示将备份从 EC2 实例导入到 MySQL 数据库的工作流程。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_4.png)


### 创建 MySQL 数据库并导入数据
<a name="mysql-importing-data-reduced-downtime-create-database"></a>

1. 确定支持此 Amazon RDS 数据库的预期工作负载所需的数据库实例类和存储空间量。作为过程的一部分，确定数据加载过程所需的足够空间量和处理能力。此外，确定处理生产工作负载所需的项目。您可以根据源 MySQL 数据库的大小和资源来进行估计。有关更多信息，请参阅 [数据库实例类](Concepts.DBInstanceClass.md)。

1. 在包含您的 Amazon EC2 实例的 AWS 区域中创建数据库实例或多可用区数据库集群。

   要创建 RDS for MySQL 多可用区数据库集群，请按[创建 Amazon RDS 的多可用区数据库集群](create-multi-az-db-cluster.md)中的说明操作。

   要创建 RDS for MySQL 数据库实例，请按照[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)中的说明操作并使用以下准则：
   + 指定与源数据库实例兼容的数据库引擎版本。
   + 指定用于 Amazon EC2 实例的相同虚拟私有云（VPC）和 VPC 安全组。此方式将确保 Amazon EC2 实例和 Amazon RDS 实例通过网络相互可见。确保您的数据库实例可公开访问。要按下一节所述设置源数据库的复制，您的数据库实例必须可公开访问。
   + 在导入数据库备份之前，不要配置多个可用区、备份保留或只读副本。在完成该导入操作后，您可以为生产实例配置多可用区和备份保留期。

1. 检查 Amazon RDS 数据库的默认配置选项。如果数据库的默认参数组没有所需的配置选项，请查找具有这些选项的参数组，或创建新的参数组。有关创建参数组的详细信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

1. 以主用户身份连接到新 Amazon RDS 数据库。创建为需要访问数据库实例的管理员、应用程序和服务提供支持所需的用户。Amazon RDS 数据库的主机名为此数据库实例的**端点**值（不包含端口号），例如 `mysampledb.123456789012.us-west-2.rds.amazonaws.com`。您可以在 Amazon RDS 控制台上的数据库详细信息中找到端点值。

1. 连接到 Amazon EC2 实例。有关更多信息，请参阅《Amazon Elastic Compute Cloud 用户指南》**中的[连接到您的实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-connect-to-instance-linux)（适用于 Linux 实例）。

1. 使用 `mysql` 命令以远程主机身份从 Amazon EC2 实例连接到 Amazon RDS 数据库。以下命令是一个示例：

   ```
   mysql -h host_name -P 3306 -u db_master_user -p
   ```

   *host\$1name* 是 Amazon RDS 数据库端点。

1. 在 `mysql` 提示符下，运行 `source` 命令并向它传递您的数据库转储文件名。此命令将数据加载到 Amazon RDS 数据库实例。
   + 对于 SQL 格式，请使用以下命令：

     ```
     mysql> source backup.sql;
     ```
   + 对于分隔文本格式，请先创建数据库（如果它不是您在设置 Amazon RDS 数据库时创建的默认数据库）。

     ```
     mysql> create database database_name;
     mysql> use database_name;
     ```

     然后，创建表。

     ```
     mysql> source table1.sql
     mysql> source table2.sql
     etc...
     ```

     然后，导入数据。

     ```
     mysql> LOAD DATA LOCAL INFILE 'table1.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     mysql> LOAD DATA LOCAL INFILE 'table2.txt' INTO TABLE table2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     etc...
     ```

     要提高性能，您可以从多个连接并行执行这些操作，以便同时创建并加载所有表。
**注意**  
如果您在最初转储表时已将任何数据格式化选项与 `mysqldump` 结合使用，则务必将相同的选项与 `LOAD DATA LOCAL INFILE` 结合使用，来确保正确地解读数据文件内容。

1. 对导入的数据库中的一个或两个表运行简单 `SELECT` 查询，来验证导入是否成功。

如果您不再需要该过程中使用的 Amazon EC2 实例，请终止 EC2 实例以减少AWS资源使用。要终止 EC2 实例，请参阅《Amazon Elastic Compute Cloud 用户指南》**中的[终止实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#terminating-instances-console)。

## 任务 4：将数据从外部数据库复制到新的 Amazon RDS 数据库
<a name="mysql-importing-data-reduced-downtime-replicate-data"></a>

在将数据复制并传输到 MySQL 数据库期间，您的源数据库可能已更新。这样，您可以使用复制功能使复制的数据库与源数据库保持同步。

![\[显示将数据从外部 MySQL 数据库复制到 Amazon RDS 上的数据库的工作流程。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_5.png)


对 Amazon RDS 数据库启动复制功能所需的权限受到限制且对 Amazon RDS 主用户不可用。因此，请使用适用于您的主要引擎版本的 Amazon RDS 存储过程：
+ [mysql\$1rds\$1set\$1external\$1master（RDS for MySQL 主要版本 8.0 及更低版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 
+ [mysql.rds\$1set\$1external\$1source（RDS for MySQL 主要版本 8.4 及更高版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_source)
+ [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md)（配置复制）和 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication)（开始复制）

### 启动复制
<a name="mysql-importing-data-reduced-downtime-start-replication"></a>

在任务 1 中，[当您设置复制选项时](#mysql-importing-data-reduced-downtime-set-replication-options)，您开启了二进制日志记录，并为源数据库设置了唯一服务器 ID。现在您可以将 Amazon RDS 数据库设置为副本，并将活动数据库作为源数据库实例。

1. 在 Amazon RDS 控制台中，将托管源数据库的服务器的 IP 地址添加到 Amazon RDS 数据库的 VPC 安全组。有关配置 VPC 安全组的更多信息，请参阅《Amazon Virtual Private Cloud 用户指南》**中的[配置安全组规则](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-security-group-rules.html)。

   您可能还需要配置本地网络，以允许来自 Amazon RDS 数据库的 IP 地址的连接，以便它能与源实例进行通信。要查找 Amazon RDS 数据库的 IP 地址，请使用 `host` 命令：

   ```
   host host_name
   ```

   *host\$1name* 是 Amazon RDS 数据库端点中的 DNS 名称，例如 `myinstance.123456789012.us-east-1.rds.amazonaws.com`。您可以在 Amazon RDS 控制台上的数据库实例详细信息中找到端点值。

1. 通过使用所选的客户端，连接到源实例并创建将用于复制的用户。此账户仅用于复制，并且必须仅供您的域使用以增强安全性。以下命令是一个示例：

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```
**注意**  
作为安全最佳实践，请指定除此处所示提示以外的凭证。

1. 对于源 实例，向复制用户授予 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限。例如，要为您的域的“`REPLICATION CLIENT`”用户授予对所有数据库的 `REPLICATION SLAVE` 和 `repl_user` 权限，请发出以下命令。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
   ```

1. 将 Amazon RDS 数据库设置为副本。使用适当的 Amazon RDS 存储过程，以主用户身份连接到 Amazon RDS 数据库，并将源数据库标识为源复制实例。
   + [mysql\$1rds\$1set\$1external\$1master（RDS for MySQL 主要版本 8.0 及更低版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_master)
   + [mysql.rds\$1set\$1external\$1source（RDS for MySQL 主要版本 8.4 及更高版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_source)

   如果您具有 SQL 格式的备份文件，则使用您在步骤 4 中确定的主日志文件名和主日志位置。如果您使用的是分隔文本格式，则使用您在创建备份文件时确定的名称和位置。下面是一些命令示例：

   **MySQL 8.4 及更高版本**

   ```
   CALL mysql.rds_set_external_source ('myserver.mydomain.com', 3306,
       'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```

   **MySQL 8.0 及更低版本**

   ```
   CALL mysql.rds_set_external_master ('myserver.mydomain.com', 3306,
       'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```
**注意**  
作为安全最佳实践，请指定除此处所示提示以外的凭证。

1. 在 Amazon RDS 数据库上，要开始复制，请运行以下使用 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 存储过程的命令：

   ```
   CALL mysql.rds_start_replication;
   ```

1. 在 Amazon RDS 数据库上，要确定副本何时与源复制实例实现同步，请运行 [SHOW REPLICA STATUS](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html) 命令。`SHOW REPLICA STATUS` 命令的结果包括 `Seconds_Behind_Master` 字段。当 `Seconds_Behind_Master` 字段返回 0 时，副本将与源复制实例保持同步。
**注意**  
以前的 MySQL 版本使用的是 `SHOW SLAVE STATUS`，而不是 `SHOW REPLICA STATUS`。如果您使用的 MySQL 版本低于 8.0.23，那么请使用 `SHOW SLAVE STATUS`。

1. 在 Amazon RDS 数据库同步后，开启自动备份以便您可以在需要时还原该数据库。您可以使用 [Amazon RDS 控制台](https://console.aws.amazon.com/rds/)开启或修改 Amazon RDS 数据库的自动备份。有关更多信息，请参阅 [备份简介](USER_WorkingWithAutomatedBackups.md)。

## 任务 5：将您的活动应用程序重定向到 Amazon RDS 实例
<a name="mysql-importing-data-reduced-downtime-redirect-app"></a>

在 MySQL 数据库与源复制实例保持同步后，您现在可以更新活动的应用程序以使用 Amazon RDS 实例。

![\[显示停止复制并将活动应用程序定向到 Amazon RDS 上的数据库的工作流程。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_6.png)


### 将活动应用程序重新导向到 MySQL 数据库并停止复制
<a name="mysql-importing-data-reduced-downtime-redirect-app-stop-app"></a>

1. 要添加 Amazon RDS 数据库的 VPC 安全组，请添加托管应用程序的服务器的 IP 地址。有关修改 VPC 安全组的更多信息，请参阅《Amazon Virtual Private Cloud 用户指南》**中的[配置安全组规则](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-security-group-rules.html)。

1. 验证 [SHOW REPLICA STATUS](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html) 命令结果中的 `Seconds_Behind_Master` 字段是否为 0，这表示副本与源复制实例保持同步。

   ```
   SHOW REPLICA STATUS;
   ```
**注意**  
以前的 MySQL 版本使用的是 `SHOW SLAVE STATUS`，而不是 `SHOW REPLICA STATUS`。如果您使用的 MySQL 版本低于 8.0.23，那么请使用 `SHOW SLAVE STATUS`。

1. 在事务完成后关闭与源的所有连接。

1. 更新应用程序以使用 Amazon RDS 数据库。此更新通常涉及更改连接设置以标识 Amazon RDS 数据库的主机名和端口、用于进行连接的用户账户和密码以及要使用的数据库。

1. 连接到数据库实例。

   对于多可用区数据库集群，连接至写入器数据库实例。

1. 通过运行使用以下使用 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 存储过程的命令来停止 Amazon RDS 实例的复制：

   ```
   CALL mysql.rds_stop_replication;
   ```

1. 通过在 Amazon RDS 数据库上使用相应的 Amazon RDS 存储过程，重置复制配置，使该实例不再被识别为副本：
   +  [mysql\$1rds\$1reset\$1external\$1master（RDS for MySQL 主要版本 8.0 及更低版本）](mysql-stored-proc-replicating.md#mysql_rds_reset_external_master) 
   + [mysql.rds\$1reset\$1external\$1source（RDS for MySQL 主要版本 8.4 及更高版本）](mysql-stored-proc-replicating.md#mysql_rds_reset_external_source)

   **MySQL 8.4 及更高版本**

   ```
   CALL mysql.rds_reset_external_source;
   ```

   **MySQL 8.0 及更低版本**

   ```
   CALL mysql.rds_reset_external_master;
   ```

1. 开启其他 Amazon RDS 特征，例如多可用区支持和只读副本。有关更多信息，请参阅[配置和管理 Amazon RDS 的多可用区部署](Concepts.MultiAZ.md)和[使用数据库实例只读副本](USER_ReadRepl.md)。