使用 Amazon Aurora 扩展 MySQL 数据库的读取 - Amazon Aurora

使用 Amazon Aurora 扩展 MySQL 数据库的读取

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

有关创建 Amazon Aurora 数据库集群的信息,请参阅创建 Amazon Aurora 数据库集群

在 MySQL 数据库实例与 Amazon Aurora 数据库集群之间设置复制时,请确保遵循以下准则:

  • 当您引用 Amazon Aurora 数据库集群时,使用 Amazon Aurora MySQL 数据库集群端点地址。如果发生故障转移,则提升为 Aurora 数据库集群主实例的 Aurora MySQL 副本继续使用数据库集群端点地址。

  • 在您的写入器实例上维护二进制日志,直至您确认其已应用于 Aurora 副本。这种维护将确保您可以在发生故障时还原写入器实例。

重要

当使用自管理复制时,您负责监控和解决可能发生的所有复制问题。有关更多信息,请参阅 诊断并解决只读副本之间的滞后

注意

对 Aurora MySQL 数据库集群启动复制功能所需的权限受到限制且对 Amazon RDS 主用户不可用。为此,您必须使用 mysql.rds_set_external_master(Aurora MySQL 版本 2)mysql.rds_set_external_source(Aurora MySQL 版本 3)mysql.rds_start_replication 过程来设置 Aurora MySQL 数据库集群和 MySQL 数据库实例之间的复制。

启动外部源实例和 Aurora MySQL 数据库集群之间的复制

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

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  2. 对源 MySQL 数据库实例运行 SHOW MASTER STATUS 命令以确定二进制日志位置。将会收到类似于以下示例的输出:

    File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------
  3. 使用 mysqldump 将数据库从外部 MySQL 数据库实例复制到 Amazon Aurora MySQL 数据库集群。对于非常大的数据库,您可能希望使用 Amazon Relational Database Service 用户指南 中的将数据导入到 MySQL 或 MariaDB 数据库实例并减少停机时间中的过程。

    对于 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-pmysql 选项,以指定用于连接到 Aurora 数据库集群的主机名、用户名、端口和密码。主机名是 Amazon Aurora 数据库集群端点中的 DNS 名称,例如 mydbcluster.cluster-123456789012.us-east-1.rds.amazonaws.com。您可以在 Amazon RDS 管理控制台上的集群详细信息中找到端点值。

  4. 再次将源 MySQL 数据库实例设为可写:

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

    有关生成备份以用于复制的更多信息,请参阅 MySQL 文档中的Backing up a source or replica by making it read only

  5. 在 Amazon RDS 管理控制台中,将托管源 MySQL 数据库的服务器的 IP 地址添加到 Amazon Aurora 数据库集群的 VPC 安全组。有关修改 VPC 安全组的更多信息,请参阅 Amazon Virtual Private Cloud 用户指南 中的您的 VPC 的安全组

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

    host aurora_endpoint_address

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

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

    CREATE USER 'repl_user'@'example.com' IDENTIFIED BY 'password';
  7. 对于外部 MySQL 实例,向复制用户授予 REPLICATION CLIENTREPLICATION SLAVE 权限。例如,要为您的域的“REPLICATION CLIENT”用户授予对所有数据库的 REPLICATION SLAVErepl_user 权限,请发出以下命令。

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'example.com' IDENTIFIED BY 'password';
  8. 在设置复制之前,请创建 Aurora MySQL 数据库集群的手动快照以作为只读副本。如果您需要将数据库集群作为只读副本来重新建立复制,则可从此快照还原 Aurora MySQL 数据库集群,而不必将 MySQL 数据库实例中的数据导入新的 Aurora MySQL 数据库集群。

  9. 使 Amazon Aurora 数据库集群成为副本。以主用户身份连接到 Amazon Aurora 数据库集群,并通过使用 mysql.rds_set_external_master(Aurora MySQL 版本 2)mysql.rds_set_external_source(Aurora MySQL 版本 3)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);
  10. 在 Amazon Aurora 数据库集群上,调用 mysql.rds_start_replication 过程以开始复制。

    CALL mysql.rds_start_replication;

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