Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库集群之间的复制(二进制日志复制)
Amazon Aurora MySQL 与 MySQL 兼容,因此您可以在 MySQL 数据库与 Amazon Aurora MySQL 数据库集群之间设置复制。此类复制使用 MySQL 二进制日志复制,通常称为二进制日志复制。如果将二进制日志复制与 Aurora 结合使用,建议您的 MySQL 数据库运行 MySQL 版本 5.5 或更高版本。您可以在 Aurora MySQL 数据库集群为复制源或副本的位置设置复制。您可以使用 Amazon RDS MySQL 数据库实例、Amazon RDS 外部的 MySQL 数据库或其他 Aurora MySQL 数据库集群进行复制。
您还可以与其他 AWS 区域中的 Amazon RDS MySQL 数据库实例或 Aurora MySQL 数据库集群之间进行复制。跨 AWS 区域执行复制时,请确保您的数据库集群和数据库实例可公开访问。Aurora MySQL 数据库集群必须是您的 VPC 中公有子网的一部分。
如果要在 Aurora MySQL 数据库集群和另一个区域中的 Aurora MySQL 数据库集群之间配置复制,您可以在与源数据库集群不同的 AWS 区域中创建一个 Aurora MySQL 数据库集群以作为只读副本。有关更多信息,请参阅跨 AWS 区域复制 Amazon Aurora MySQL 数据库集群。
使用 Aurora MySQL 2.04 及更高版本,您可以在 Aurora MySQL 与为复制使用全局事务标识符 (GTID) 的外部源或目标之间复制。请确保 Aurora MySQL 数据库集群中的 GTID 相关参数具有与外部数据库的 GTID 状态兼容的设置。若要了解如何执行此操作,请参阅 在 Aurora MySQL 中使用基于 GTID 的复制。
在 Aurora MySQL 与 MySQL 之间复制时,请确保仅使用 InnoDB 表。如果有 MyISAM 表需要复制,可以在设置复制之前使用以下命令将其转换为 InnoDB。
alter table <schema>.<table_name> engine=innodb, algorithm=copy;
设置与 Aurora MySQL 的 MySQL 复制包括以下步骤(本主题后文会详细讨论):
设置与 MySQL 或其他 Aurora 数据库集群的复制
要使用 MySQL 设置 Aurora 复制,请执行以下步骤。
1.在复制源上启用二进制日志记录
在下面查找有关如何在数据库引擎的复制源上启用二进制日志记录的说明。
数据库引擎 | 说明 |
---|---|
Aurora |
在 Aurora MySQL 数据库集群上启用二进制日志记录 将 有关更多信息,请参阅Amazon Aurora 数据库集群和数据库实例参数和使用数据库参数组和数据库集群参数组。 |
RDS MySQL |
在 Amazon RDS 数据库实例上启用二进制日志记录 您不能直接为 Amazon RDS 数据库实例启用二进制日志记录,但可以通过执行以下操作之一来启用它: |
MySQL(外部) |
设置加密复制 要使用 Aurora MySQL 5.6 版安全地复制数据,您可以使用加密复制。 目前,仅 Aurora MySQL 5.6 版支持具有外部 MySQL 数据库的加密复制。 如果您不需要使用加密复制,可以跳过以下步骤。 以下是使用加密复制的先决条件:
在加密复制期间,Aurora MySQL 数据库集群充当 MySQL 数据库服务器的客户端。Aurora MySQL 客户端的证书和密钥必须是 .pem 格式的文件。
在外部 MySQL 数据库上启用二进制日志记录
|
2.在复制源上保留二进制日志,直到不再需要
使用 MySQL 二进制日志复制时,Amazon RDS 不会对复制过程进行管理。因此,您需要确保复制源上的二进制日志文件保留到更改应用于副本之后。保留这些文件可帮助确保在发生故障时可还原您的源数据库。
在下面查找有关如何为数据库引擎保留二进制日志的说明。
数据库引擎 | 说明 |
---|---|
Aurora |
在 Aurora MySQL 数据库集群上保留二进制日志 您无法访问 Aurora MySQL 数据库集群的二进制日志文件。因此,您必须为复制源上的二进制日志文件选择足够长的保留时间,从而确保在 Amazon RDS 删除二进制日志文件之前将更改应用于副本。Aurora MySQL 数据库集群上的二进制日志文件最多可以保留 90 天。 如果所设置的复制以 MySQL 数据库或 RDS MySQL 数据库实例作为副本,并且要创建副本的数据库非常大,请为二进制日志文件选择较长的保留时间,直到数据库到副本的初始复制完成,并且副本滞后达到 0。 要设置 binlog 保留时间范围,请使用 mysql_rds_set_configuration 过程,并指定
复制开始之后,可以对副本运行 如果您为指定 |
RDS MySQL |
在 Amazon RDS 数据库实例上保留二进制日志 您也可以通过设置二进制日志保留小时数在 Amazon RDS 数据库实例上保留二进制日志文件,就如同 Aurora MySQL 数据库集群一样(如上一节所述)。 还可以通过为数据库实例创建只读副本,在 Amazon RDS 数据库实例上保留二进制日志文件。此只读副本是临时副本,仅用于保留二进制日志文件的目的。在创建只读副本后,请在只读副本上调用
mysql_rds_stop_replication 过程( |
MySQL (外部) |
在外部 MySQL 数据库上保留二进制日志 外部 MySQL 数据库上的二进制日志文件不由 Amazon RDS 进行管理,因此,它们会一直保留,直到由您删除。 复制开始之后,可以对副本运行 |
3.创建复制源的快照
使用复制源的快照将数据的基准副本加载到您的副本上,然后从该点开始复制。
在下面查找有关如何创建数据库引擎的复制源快照的说明。
数据库引擎 | 说明 |
---|---|
Aurora |
创建 Aurora MySQL 数据库集群的快照
|
RDS MySQL |
创建 Amazon RDS 数据库实例的快照
|
MySQL (外部) |
创建外部 MySQL 数据库的快照
|
4.将快照加载到副本目标
如果您打算从 Amazon RDS 外部的 MySQL 数据库转储加载数据,则可能要创建用于将转储文件复制到其中的 EC2 实例,然后从该 EC2 实例将数据加载到数据库集群或数据库实例中。使用此方法时,您可以在将转储文件复制到 EC2 实例之前压缩它们,以便降低与向 Amazon RDS 复制数据关联的网络成本。在网络中进行传输时,还可以加密转储文件以保护数据。
在下面查找有关如何将复制源的快照加载到数据库引擎的副本目标的说明。
数据库引擎 | 说明 |
---|---|
Aurora |
将快照加载到 Aurora MySQL 数据库集群
|
RDS MySQL |
将快照加载到 Amazon RDS 数据库实例
|
MySQL (外部) |
将快照加载到外部 MySQL 数据库中 无法将数据库快照或数据库集群快照加载到外部 MySQL 数据库中。您必须使用
|
5.在副本目标上启用复制
启用复制之前,我们建议您手动创建 Aurora MySQL 数据库集群或 RDS MySQL 数据库实例副本目标的快照。如果出现问题,而您需要重新建立与数据库集群或数据库实例副本目标间的复制,则您可以从此快照还原数据库集群或数据库实例,而不必再次将数据导入您的副本目标之中。
此外,创建专用于复制的用户 ID。以下是示例。
mysql>
CREATE USER 'repl_user
'@'<domain_name>
' IDENTIFIED BY '<password>
';
该用户需要 REPLICATION CLIENT
和 REPLICATION SLAVE
权限。向该用户授予这些权限。
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO '
repl_user
'@'<domain_name>
';
如果您需要使用加密复制,则需为复制用户要求 SSL 连接。例如,您可以使用下面一个语句来要求用户账户 repl_user
的 SSL 连接。
GRANT USAGE ON *.* TO '
repl_user
'@'<domain_name>
' REQUIRE SSL;
如果不包括 REQUIRE SSL
,则复制连接可能会无提示地返回到未加密连接。
在下面查找有关如何对数据库引擎启用复制的说明。
数据库引擎 | 说明 |
---|---|
Aurora |
从 Aurora MySQL 数据库集群中启用复制
|
RDS MySQL |
从 Amazon RDS 数据库实例中启用复制
|
MySQL (外部) |
启用从外部 MySQL 数据库进行复制
|
6.监控副本
在设置与 Aurora MySQL 数据库集群的 MySQL 复制时,您必须在 Aurora MySQL 数据库集群作为副本目标时监控它的故障转移事件。如果发生故障转移,则可能会在具有不同网络地址的新主机上重新创建作为副本目标的数据库集群。有关如何监控故障转移事件的信息,请参阅使用 Amazon RDS 事件通知。
您还可以通过连接到副本目标并运行 SHOW SLAVE STATUS
命令,监控副本目标落后于复制源的程度。命令输出中的 Seconds Behind Master
字段可以揭示副本目标落后于源的程度。
停止 Aurora 和 MySQL 之间或 Aurora 和其他 Aurora 数据库集群之间的复制
要停止对 MySQL 数据库实例、外部 MySQL 数据库或其他 Aurora 数据库集群进行的二进制日志复制,请执行以下步骤 (本主题后文有详细讨论)。
1.在副本目标上停止二进制日志复制
在下面查找有关如何停止数据库引擎的二进制日志复制的说明。
数据库引擎 | 说明 |
---|---|
Aurora |
在 Aurora MySQL 数据库集群副本目标上停止 binlog 复制 连接到作为副本目标的 Aurora 数据库集群,然后调用 mysql_rds_stop_replication 过程。 |
RDS MySQL |
在 Amazon RDS 数据库实例上停止 binlog 复制 连接到作为副本目标的 RDS 数据库实例,然后调用 mysql_rds_stop_replication 过程。 |
MySQL (外部) |
在外部 MySQL 数据库上停止二进制日志复制 连接到 MySQL 数据库并调用 |
2.在复制源上禁用二进制日志记录
在下面查找有关如何在数据库引擎的复制源上禁用二进制日志记录的说明。
数据库引擎 | 说明 |
---|---|
Aurora |
在 Amazon Aurora 数据库集群上禁用二进制日志记录
|
RDS MySQL |
在 Amazon RDS 数据库实例上禁用二进制日志记录 您不能直接禁用 Amazon RDS 数据库实例的二进制日志记录,但可通过执行以下操作来禁用它:
|
MySQL (外部) |
在外部 MySQL 数据库上禁用二进制日志记录 连接到 MySQL 数据库并调用
|