配置与外部源实例之间的基于 GTID 的复制 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

配置与外部源实例之间的基于 GTID 的复制

您可以将基于全局事务标识符 (GTID) 的复制从版本 10.0.24 或更高版本的外部 MariaDB 实例设置到 RDS for MariaDB 数据库实例中。对 Amazon RDS 设置外部源实例和副本时,请遵循以下准则:

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

  • 在源实例上保留二进制日志 (binlog),直到您确认将其应用于副本。这种维护将确保您可以在发生故障时还原源实例。

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

注意

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

要启动外部源实例和 Amazon RDS 上的 MariaDB 数据库实例之间的复制,请使用以下步骤。

启动复制
  1. 将源 MariaDB 实例设为只读:

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  2. 获取外部 MariaDB 实例的当前 GTID。您可以通过使用 mysql 或您选择的查询编辑器运行 SELECT @@gtid_current_pos; 来执行该操作。

    GTID 采用 <domain-id>-<server-id>-<sequence-id> 格式。典型的 GTID 将类似于 0-1234510749-1728。有关 GTID 及其组成部分的更多信息,请参阅 MariaDB 文档中的全局事务 ID

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

    对于 Linux、macOS 或 Unix:

    mysqldump \ --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u local_user \ -plocal_password | mysql \ --host=hostname \ --port=3306 \ -u RDS_user_name \ -pRDS_password

    对于 Windows:

    mysqldump ^ --databases database_name ^ --single-transaction ^ --compress ^ --order-by-primary \ -u local_user \ -plocal_password | mysql ^ --host=hostname ^ --port=3306 ^ -u RDS_user_name ^ -pRDS_password
    注意

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

    作为安全最佳实践,请指定除此处所示提示以外的密码。

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

  4. 再次将源 MariaDB 实例设为可写。

    mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;
  5. 在 Amazon RDS 管理控制台中,将承载外部 MariaDB 数据库的服务器的 IP 地址添加到 MariaDB 数据库实例的 VPC 安全组。有关修改 VPC 安全组的更多信息,请转到 Amazon Virtual Private Cloud 用户指南 中的您的 VPC 的安全组

    在满足以下条件时,IP 地址可能会发生更改:

    • 您正在使用公有 IP 地址在外部源实例和数据库实例之间进行通信。

    • 外部源实例已停止并重新启动。

    如果满足这些条件,请在添加 IP 地址之前先对其进行验证。

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

    host db_instance_endpoint

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

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

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
    注意

    作为安全最佳实践,请指定除此处所示提示以外的密码。

  7. 对于外部 MariaDB 实例,向复制用户授予 REPLICATION CLIENTREPLICATION SLAVE 权限。例如,要为您的域的“REPLICATION CLIENT”用户授予对所有数据库的 REPLICATION SLAVErepl_user 权限,请发出以下命令。

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
  8. 将 MariaDB 数据库实例设置为副本。通过使用 mysql.rds_set_external_master_gtid 命令,以主用户身份连接到 MariaDB 数据库实例,并将外部 MariaDB 数据库标识为复制源实例。使用您在步骤 2 中确定的 GTID。以下是示例。

    CALL mysql.rds_set_external_master_gtid ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'GTID', 0);
    注意

    作为安全最佳实践,请指定除此处所示提示以外的密码。

  9. 在 MariaDB 数据库实例上,发出 mysql.rds_start_replication 命令以启动复制:

    CALL mysql.rds_start_replication;