

# 使用 Amazon Aurora 扩展 MySQL 数据库的读取
<a name="AuroraMySQL.Replication.ReadScaling"></a>

您可以将 Amazon Aurora 用于 MySQL 数据库实例，以便利用 Amazon Aurora 的读取扩展功能并为 MySQL 数据库实例扩展读取工作负载。要使用 Aurora 对 MySQL 数据库实例扩缩读取，请创建 Amazon Aurora MySQL 数据库集群并使它成为 MySQL 数据库实例的只读副本。这适用于 RDS for MySQL 数据库实例或是在 Amazon RDS 外部运行的 MySQL 数据库。

有关创建 Amazon Aurora 数据库集群的信息，请参阅[创建 Amazon Aurora 数据库集群](Aurora.CreateInstance.md)。

在 MySQL 数据库实例与 Amazon Aurora 数据库集群之间设置复制时，请确保遵循以下准则：
+ 当您引用 Amazon Aurora 数据库集群时，使用 Amazon Aurora MySQL 数据库集群端点地址。如果发生故障转移，则提升为 Aurora 数据库集群主实例的 Aurora MySQL 副本继续使用数据库集群端点地址。
+ 在您的写入器实例上维护二进制日志，直至您确认其已应用于 Aurora 副本。这种维护将确保您可以在发生故障时还原写入器实例。

**重要**  
当使用自管理复制时，您负责监控和解决可能发生的所有复制问题。有关更多信息，请参阅 [诊断并解决只读副本之间的滞后](CHAP_Troubleshooting.md#CHAP_Troubleshooting.MySQL.ReplicaLag)。

**注意**  
对 Aurora MySQL 数据库集群启动复制功能所需的权限受到限制且对 Amazon RDS 主用户不可用。为此，您必须使用 [mysql.rds\$1set\$1external\$1master（Aurora MySQL 版本 2）](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 或 [mysql.rds\$1set\$1external\$1source（Aurora MySQL 版本 3）](mysql-stored-proc-replicating.md#mysql_rds_set_external_source) 和 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 过程来设置 Aurora MySQL 数据库集群和 MySQL 数据库实例之间的复制。

## 启动外部源实例和 Aurora MySQL 数据库集群之间的复制
<a name="AuroraMySQL.Replication.ReadScaling.Procedure"></a>

1.  将源 MySQL 数据库实例设为只读：

   ```
   mysql> FLUSH TABLES WITH READ LOCK;
   mysql> SET GLOBAL read_only = ON;
   ```

1.  对源 MySQL 数据库实例运行 `SHOW MASTER STATUS` 命令以确定二进制日志位置。将会收到类似于以下示例的输出：

   ```
   File                        Position
   ------------------------------------
    mysql-bin-changelog.000031      107
   ------------------------------------
   ```

1. 使用 `mysqldump` 将数据库从外部 MySQL 数据库实例复制到 Amazon Aurora MySQL 数据库集群。对于非常大的数据库，您可能希望使用《Amazon Relational Database Service 用户指南》**中的[将数据导入到 Amazon RDS for MySQL 数据库并减少停机时间](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql-importing-data-reduced-downtime.html)中的过程。

   对于 Linux、macOS 或 Unix：

   ```
   mysqldump \
       --databases <database_name> \
       --single-transaction \
       --compress \
       --order-by-primary \
       -u local_user \
       -p local_password | mysql \
           --host aurora_cluster_endpoint_address \
           --port 3306 \
           -u RDS_user_name \
           -p RDS_password
   ```

   对于：Windows

   ```
   mysqldump ^
       --databases <database_name> ^
       --single-transaction ^
       --compress ^
       --order-by-primary ^
       -u local_user ^
       -p local_password | mysql ^
           --host aurora_cluster_endpoint_address ^
           --port 3306 ^
           -u RDS_user_name ^
           -p RDS_password
   ```
**注意**  
确保 `-p` 选项和输入的密码之间没有空格。

   在 `--host` 命令中使用 `--user (-u)`、`--port`、`-p` 和 `mysql` 选项，以指定用于连接到 Aurora 数据库集群的主机名、用户名、端口和密码。主机名是 Amazon Aurora 数据库集群端点中的 DNS 名称，例如 `mydbcluster.cluster-123456789012.us-east-1.rds.amazonaws.com`。您可以在 Amazon RDS 管理控制台上的集群详细信息中找到端点值。

1. 再次将源 MySQL 数据库实例设为可写：

   ```
   mysql> SET GLOBAL read_only = OFF;
   mysql> UNLOCK TABLES;
   ```

   有关生成备份以用于复制的更多信息，请参阅 MySQL 文档中的[http://dev.mysql.com/doc/refman/8.0/en/replication-solutions-backups-read-only.html](http://dev.mysql.com/doc/refman/8.0/en/replication-solutions-backups-read-only.html)。

1. 在 Amazon RDS 管理控制台中，将托管源 MySQL 数据库的服务器的 IP 地址添加到 Amazon Aurora 数据库集群的 VPC 安全组。有关修改 VPC 安全组的更多信息，请参阅 *Amazon Virtual Private Cloud 用户指南* 中的[您的 VPC 的安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

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

   ```
   host aurora_endpoint_address
   ```

   主机名是 Amazon Aurora 数据库集群端点中的 DNS 名称。

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

   ```
   CREATE USER 'repl_user'@'example.com' IDENTIFIED BY 'password';
   ```

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

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'example.com'
       IDENTIFIED BY 'password';
   ```

1. 在设置复制之前，请创建 Aurora MySQL 数据库集群的手动快照以作为只读副本。如果您需要将数据库集群作为只读副本来重新建立复制，则可从此快照还原 Aurora MySQL 数据库集群，而不必将 MySQL 数据库实例中的数据导入新的 Aurora MySQL 数据库集群。

1. 使 Amazon Aurora 数据库集群成为副本。以主用户身份连接到 Amazon Aurora 数据库集群，并通过使用 [mysql.rds\$1set\$1external\$1master（Aurora MySQL 版本 2）](mysql-stored-proc-replicating.md#mysql_rds_set_external_master)或 [mysql.rds\$1set\$1external\$1source（Aurora MySQL 版本 3）](mysql-stored-proc-replicating.md#mysql_rds_set_external_source)和 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 过程将源 MySQL 数据库确定为复制源。

   使用在步骤 2 中确定的二进制日志文件名和位置。示例如下：

   ```
   For Aurora MySQL version 2:
   CALL mysql.rds_set_external_master ('mymasterserver.example.com', 3306,
       'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0);
   
   For Aurora MySQL version 3:
   CALL mysql.rds_set_external_source ('mymasterserver.example.com', 3306,
       'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0);
   ```

1. 在 Amazon Aurora 数据库集群上，调用 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 过程以开始复制。

   ```
   CALL mysql.rds_start_replication; 
   ```

在源 MySQL 数据库实例与 Amazon Aurora 数据库集群之间建立复制之后，可以将 Aurora 副本添加到 Amazon Aurora 数据库集群。随后可以连接到 Aurora 副本以对数据进行读取扩展。有关创建 Aurora 副本的信息，请参阅[将 Aurora 副本添加到数据库集群](aurora-replicas-adding.md)。