Amazon Relational Database Service
用户指南 (API Version 2014-10-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

利用 Amazon RDS 外部运行的 MySQL 或 MariaDB 实例进行复制

您可以设置 Amazon RDS MySQL 或 MariaDB 数据库实例和 Amazon RDS 外部的 MySQL 或 MariaDB 实例之间的复制。在所有情况下都应使用本主题中的过程配置复制,除非外部实例是 MariaDB 10.0.2 版或更高版本并且 Amazon RDS 实例是 MariaDB。在这种情况下,请使用 将基于 GTID 的复制配置到 Amazon RDS MariaDB 数据库实例中 上的过程设置基于 GTID 的复制。

对 Amazon RDS 设置外部复制主体和副本时,请务必遵循以下准则:

  • 监控作为副本的 Amazon RDS 数据库实例的故障转移事件。如果发生故障转移,则可能会在具有不同的网络地址的新主机上重新创建作为副本的数据库实例。有关如何监控故障转移事件的信息,请参阅使用 Amazon RDS 事件通知

  • 在您的主实例上保留二进制日志,直至您确认其已应用于副本。此维护可确保您在发生故障时可还原您的主实例。

  • 对 Amazon RDS 数据库实例启用自动备份。启用自动备份可确保您在需要重新同步主体和副本时能够将副本还原到特定时间点。有关备份和时间点还原的信息,请参阅备份和还原 Amazon RDS 数据库实例

注意

对 Amazon RDS 数据库实例启动复制功能所需的权限受到限制且对 Amazon RDS 主用户不可用。因此,您必须使用 Amazon RDS mysql.rds_set_external_mastermysql.rds_start_replication 命令来设置活动数据库和 Amazon RDS 数据库之间的复制。

在 Amazon RDS 上启动外部主实例和数据库实例之间的复制

  1. 将源 MySQL 或 MariaDB 实例设为只读:

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

    File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------
  3. 使用 mysqldump 将数据库从外部实例复制到 Amazon RDS 数据库实例。对于非常大的数据库,您可能需要使用将数据导入到 Amazon RDS MySQL 或 MariaDB 数据库实例中,同时减少停机时间中的过程。

    针对 Linux、OS X 或 Unix:

    mysqldump --databases <database_name> \ --single-transaction \ --compress \ --order-by-primary \ -u <local_user> \ -p<local_password> | mysql \ --host=hostname \ --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=hostname ^ --port=3306 ^ -u <RDS_user_name> ^ -p<RDS_password>

    注意

    确保 -p 选项和输入的密码之间没有空格。

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

  4. 再次将源 MySQL 或 MariaDB 实例设为可写:

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

    有关生成备份以用于复制的更多信息,请参阅 MySQL 文档中的通过将主体和副本设为只读来对其进行备份

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

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

    host <RDS_MySQL_DB_host_name>

    主机名是 Amazon RDS 数据库实例终端节点中的 DNS 名称。

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

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

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY '<password>';
  8. 将 Amazon RDS 数据库实例设置为副本。通过使用 mysql.rds_set_external_master 命令,以主用户身份连接到 Amazon RDS 数据库实例,并将外部 MySQL 或 MariaDB 数据库标识为复制主体。使用您在步骤 2 中确定的主日志文件名和主日志位置。以下是示例:

    CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', '<password>', 'mysql-bin-changelog.000031', 107, 0);
  9. 在 Amazon RDS 数据库实例上,发出 mysql.rds_start_replication 命令以启动复制:

    CALL mysql.rds_start_replication;