为 Aurora MySQL 设置二进制日志复制
设置使用 Aurora MySQL 进行 MySQL 复制包括以下步骤(下面将详细讨论):
目录
1. 在复制源上开启二进制日志记录
在下面查找有关如何在数据库引擎的复制源上开启二进制日志记录的说明。
数据库引擎 | 说明 |
---|---|
Aurora MySQL |
在 Aurora MySQL 数据库集群上开启二进制日志记录 将 要更改 如果要将 有关更多信息,请参阅Amazon Aurora 数据库集群和数据库实例参数和Amazon Aurora 的参数组。 |
RDS for MySQL |
在 Amazon RDS 数据库实例上开启二进制日志记录 您不能直接为 Amazon RDS 数据库实例开启二进制日志记录,但可以通过执行以下操作之一来开启它: |
MySQL (外部) |
设置加密复制 要使用 Aurora MySQL 版本 2 安全地复制数据,您可以使用加密复制。 注意如果您不需要使用加密复制,可以跳过以下步骤。 以下是使用加密复制的先决条件:
在加密复制期间,Aurora MySQL 数据库集群充当 MySQL 数据库服务器的客户端。Aurora MySQL 客户端的证书和密钥必须是 .pem 格式的文件。
在外部 MySQL 数据库上开启二进制日志记录
|
2. 在复制源上保留二进制日志,直到不再需要
使用 MySQL 二进制日志复制时,Amazon RDS 不会对复制过程进行管理。因此,您需要确保复制源上的二进制日志文件保留到更改应用于副本之后。保留这些文件有助于在发生故障时可还原您的源数据库。
使用以下说明为数据库引擎保留二进制日志。
数据库引擎 | 说明 |
---|---|
Aurora MySQL |
在 Aurora MySQL 数据库集群上保留二进制日志 您无法访问 Aurora MySQL 数据库集群的二进制日志文件。因此,您必须为复制源上的二进制日志文件选择足够长的保留时间,从而确保在 Amazon RDS 删除二进制日志文件之前将更改应用于副本。Aurora MySQL 数据库集群上的二进制日志文件最多可以保留 90 天。 如果所设置的复制以 MySQL 数据库或 RDS for MySQL 数据库实例作为副本,并且要创建副本的数据库非常大,请为二进制日志文件选择较长的保留时间范围,直到数据库到副本的初始复制完成,并且副本滞后达到 0。 要设置二进制日志保留时间范围,请使用 mysql.rds_set_configuration 过程,并指定 以下示例将二进制日志文件的保留期设置为 6 天:
复制开始之后,可以通过对副本运行 如果未指定此设置,则 Aurora MySQL 的默认值为 24 小时(1 天)。 如果您为 |
RDS for MySQL |
在 Amazon RDS 数据库实例上保留二进制日志 您也可以通过设置二进制日志保留小时数在 Amazon RDS 数据库实例上保留二进制日志文件,就如同 Aurora MySQL 数据库集群一样(如上一行所述)。 还可以通过为数据库实例创建只读副本,在 Amazon RDS 数据库实例上保留二进制日志文件。此只读副本是临时副本,仅用于保留二进制日志文件的目的。在创建只读副本后,在只读副本上调用 mysql.rds_stop_replication 过程。复制停止时,Amazon RDS 不会删除复制源上的任何二进制日志文件。设置与永久副本间的复制之后,可以在复制源与永久副本之间的副本滞后( |
MySQL (外部) |
在外部 MySQL 数据库上保留二进制日志 外部 MySQL 数据库上的二进制日志文件不由 Amazon RDS 进行管理,因此,它们会一直保留,直到由您删除。 复制开始之后,可以通过对副本运行 |
3. 创建复制源的副本或转储
使用复制源的快照、克隆或转储将数据的基准副本加载到您的副本。然后从该点开始复制。
使用以下说明创建数据库引擎的复制源的副本或转储。
数据库引擎 | 说明 |
---|---|
Aurora MySQL |
创建 Aurora MySQL 数据库集群的副本 使用以下方法之一:
确定二进制日志文件名和位置 使用以下方法之一:
创建 Aurora MySQL 数据库集群的转储 如果副本目标是外部 MySQL 数据库或 RDS for MySQL 数据库实例,则必须从 Aurora 数据库集群创建转储文件。 请务必针对您创建的源数据库集群的副本运行
|
RDS for MySQL |
创建 Amazon RDS 数据库实例的快照 创建 Amazon RDS 数据库实例的只读副本。有关更多信息,请参阅 Amazon Relational Database Service 用户指南 中的创建只读副本。
|
MySQL (外部) |
创建外部 MySQL 数据库的转储
|
4. 将转储加载到副本目标(如果需要)
如果您打算从 Amazon RDS 外部的 MySQL 数据库转储加载数据,则可能要创建用于将转储文件复制到其中的 EC2 实例。然后,可以从该 EC2 实例将数据加载到数据库集群或数据库实例中。使用此方法时,您可以在将转储文件复制到 EC2 实例之前压缩它们,以便降低与向 Amazon RDS 复制数据关联的网络成本。在网络中进行传输时,还可以加密转储文件以保护数据。
注意
如果您创建一个新的 Aurora MySQL 数据库集群作为副本目标,则不需要加载转储文件:
-
可以从数据库集群快照进行还原来创建新的数据库集群。有关更多信息,请参阅从数据库集群快照还原。
-
可以克隆源数据库集群来创建新的数据库集群。有关更多信息,请参阅克隆 Amazon Aurora 数据库集群卷。
-
可以将数据从数据库实例快照迁移到新的数据库集群中。有关更多信息,请参阅将数据迁移到 Amazon Aurora MySQL 数据库集群。
使用以下说明将复制源的转储加载到数据库引擎的副本目标中。
数据库引擎 | 说明 |
---|---|
Aurora MySQL |
将转储加载到 Aurora MySQL 数据库集群
|
RDS for MySQL |
将转储加载到 Amazon RDS 数据库实例
|
MySQL (外部) |
将转储加载到外部 MySQL 数据库 您无法将数据库快照或数据库集群快照加载到外部 MySQL 数据库中。您必须使用
|
5. 在您的复制源上创建复制用户
在源上创建一个专用于复制的用户 ID。以下示例适用于 RDS for MySQL 或外部 MySQL 源数据库。
mysql>
CREATE USER 'repl_user
'@'domain_name
' IDENTIFIED BY 'password
';
对于 Aurora MySQL 源数据库,skip_name_resolve
数据库集群参数设置为 1
(ON
)且无法修改,因此您必须使用主机的 IP 地址而不是域名。有关更多信息,请参阅 MySQL 文档中的 skip_name_resolve
mysql>
CREATE USER 'repl_user
'@'IP_address
' IDENTIFIED BY 'password
';
该用户需要 REPLICATION CLIENT
和 REPLICATION SLAVE
权限。向该用户授予这些权限。
如果您需要使用加密复制,则需为复制用户要求 SSL 连接。例如,您可以使用下面的语句之一来要求对用户账户 repl_user
使用 SSL 连接。
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO '
repl_user
'@'IP_address
';
GRANT USAGE ON *.* TO '
repl_user
'@'IP_address
' REQUIRE SSL;
注意
如果不包括 REQUIRE SSL
,则复制连接可能会无提示地返回到未加密连接。
6. 在副本目标上开启复制
开启复制之前,建议您手动创建 Aurora MySQL 数据库集群或 RDS for MySQL 数据库实例副本目标的快照。如果出现问题,而您需要重新建立与数据库集群或数据库实例副本目标间的复制,则您可以从此快照还原数据库集群或数据库实例,而不必再次将数据导入您的副本目标之中。
使用以下说明对数据库引擎开启复制。
数据库引擎 | 说明 |
---|---|
Aurora MySQL |
从 Aurora MySQL 数据库集群中开启复制
要使用 SSL 加密,请将最终值设置为 |
RDS for MySQL |
从 Amazon RDS 数据库实例中开启复制
要使用 SSL 加密,请将最终值设置为 |
MySQL (外部) |
开启从外部 MySQL 数据库进行复制
|
如果复制失败,可能会导致副本上的意外输入/输出大量增加,从而降低性能。如果复制失败或不再需要复制,则可运行 mysql.rds_reset_external_master(Aurora MySQL 版本 2) 或 mysql.rds_reset_external_source(Aurora MySQL 版本 3) 存储过程来删除复制配置。
设置停止复制到只读副本的位置
在 Aurora MySQL 版本 3.04 及更高版本中,您可以使用 mysql.rds_start_replication_until(Aurora MySQL 版本 3) 存储过程启动复制,然后在指定的二进制日志文件位置停止复制。
开始复制到只读副本并在特定位置处停止复制
-
通过使用 MySQL 客户端,以主用户的身份连接到副本 Aurora MySQL 数据库集群。
-
运行 mysql.rds_start_replication_until(Aurora MySQL 版本 3) 存储过程。
以下示例将启动复制并复制更改,直到它到达
120
二进制日志文件中的mysql-bin-changelog.000777
位置。在灾难恢复方案中,假定位置120
刚好位于灾难之前。call mysql.rds_start_replication_until( 'mysql-bin-changelog.000777', 120);
当到达停止点时,复制将自动停止。将生成以下 RDS 事件:Replication has been stopped since the replica reached the stop point specified by the
rds_start_replication_until stored procedure
。
如果使用基于 GTID 的复制,请使用 mysql.rds_start_replication_until_gtid(Aurora MySQL 版本 3) 存储过程而不是 mysql.rds_start_replication_until(Aurora MySQL 版本 3) 存储过程。有关基于 GTID 的复制的更多信息,请参阅使用基于 GTID 的复制。
7. 监控副本
在设置与 Aurora MySQL 数据库集群的 MySQL 复制时,您必须在 Aurora MySQL 数据库集群作为副本目标时监控它的失效转移事件。如果发生失效转移,则可能会在具有不同网络地址的新主机上重新创建作为副本目标的数据库集群。有关如何监控失效转移事件的信息,请参阅使用 Amazon RDS 事件通知。
您还可以通过连接到副本目标并运行 SHOW SLAVE STATUS
(Aurora MySQL 版本 2)或 SHOW REPLICA STATUS
(Aurora MySQL 版本 3)命令,监控副本目标落后于复制源的程度。命令输出中的 Seconds Behind Master
字段可以揭示副本目标落后于源的程度。
重要
如果您升级数据库集群并指定自定义参数组,请确保在升级完成后手动重启集群。这样可以让集群使用新的自定义参数设置,并重新启动二进制日志复制。
在复制源和目标之间同步密码
使用 SQL 语句更改复制源上的用户账户和密码时,这些更改将自动复制到复制目标。
如果您使用 Amazon Web Services Management Console、Amazon CLI 或 RDS API 来更改复制源上的主密码,则这些更改不会自动复制到复制目标。如果要在源系统和目标系统之间同步主用户和主密码,则必须自己对复制目标进行相同的更改。