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

将基于 GTID 的复制配置到 Amazon RDS MariaDB 数据库实例中

您可以将基于 GTID 的复制从版本 10.0.24 或更高版本的外部 MariaDB 实例设置到 Amazon RDS MariaDB 数据库实例中。对 Amazon RDS 设置外部复制主体和副本时,请务必遵循以下准则:

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

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

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

注意

对 Amazon RDS MariaDB 数据库实例启动复制功能所需的权限受到限制,且对 Amazon RDS 主用户不可用。因此,您必须使用 Amazon RDS mysql.rds_set_external_master_gtidmysql.rds_start_replication 命令来设置活动数据库和 Amazon RDS 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 实例复制到 Amazon RDS MariaDB 数据库实例。对于非常大的数据库,您可能需要使用将数据导入到 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 MariaDB 数据库实例的主机名、用户名、端口和密码。主机名是 Amazon RDS 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 地址添加到 Amazon RDS MariaDB 数据库实例的 VPC 安全组。有关修改 VPC 安全组的更多信息,请转到 Amazon Virtual Private Cloud 用户指南 中的您的 VPC 的安全组

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

    host <RDS_MariaDB_DB_host_name>

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

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

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY '<password>';
  7. 对于外部 MariaDB 实例,向复制用户授予 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 MariaDB 数据库实例设置为副本。通过使用 mysql.rds_set_external_master_gtid 命令,以主用户身份连接到 Amazon RDS MariaDB 数据库实例,并将外部 MariaDB 数据库标识为复制主体。使用您在步骤 2 中确定的 GTID。以下是示例:

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

    CALL mysql.rds_start_replication;