将本地 MySQL 数据库迁移到 Amazon Aurora MySQL
关键要点
在本篇文章中,我们将介绍如何使用 AWS DMS数据迁移服务中的同类数据迁移功能,通过私有网络将本地 MySQL 数据库迁移到 Amazon Aurora MySQL。这种迁移能够显著提高数据库的性能、可扩展性和可管理性。通过 AWS DMS,迁移过程将变得简洁高效。
概述
本地数据库到 Amazon RDS关系数据库服务的同类迁移简化了数据库的迁移流程。通过 AWS DMS,用户可以轻松地将数据、表分区、数据类型及二次对象,如函数和存储过程,迁移至 Aurora MySQL 实例。
在此我们将详细指导您如何通过 AWS DMS 同类数据迁移步骤,将本地 MySQL 数据库迁移到 Amazon Aurora MySQL,利用网络负载均衡器NLB在私有网络中进行连接。
以下是实施此解决方案的步骤详细说明见下文:
准备源数据库。准备目标数据库。在 AWS Secrets Manager 中为源和目标数据库创建密钥。创建 AWS DMS 子网组。创建网络负载均衡器。创建实例配置文件。创建数据提供者。创建迁移项目。启动数据迁移。监控复制情况。执行切换。清理资源。前提条件
确保您满足以下前提条件:
一个有效的 AWS 账户。本地环境与 AWS 账户必须通过 AWS Direct Connect 或 AWS SitetoSite VPN 进行连接。本地安全防火墙应允许本地网络与 AWS VPC CIDR 范围之间的进出流量。用于同类数据迁移的 IAM 策略和角色。在目标 AWS 账户中有一个 Aurora MySQL 数据库实例。建议不将同类数据迁移用于从高版本数据库到低版本数据库的数据迁移。准备源数据库
在本节中,您将准备源数据库以进行同类数据迁移。
创建数据库用户
要运行同类数据迁移,必须使用具有复制所需权限的数据库用户。使用以下脚本在 MySQL 数据库中创建一个具有必要权限的数据库用户。
sqlCREATE USER appuser@ IDENTIFIED BY yourpasswordGRANT REPLICATION SLAVE REPLICATION CLIENT ON TO appuser@GRANT SELECT RELOAD LOCK TABLES SHOW VIEW EVENT TRIGGER ON TO appuser@GRANT BACKUPADMIN ON TO appuser@
更多有关数据库用户权限的信息,请参见 使用 MySQL 兼容数据库作为 AWS DMS 同类数据迁移源。
启用二进制日志记录及其他必要参数
确保在源数据库上启用二进制日志以使用 CDC变更数据捕获。有关启用二进制日志的更多信息,请参见 使用自我管理 MySQL 兼容数据库作为同类数据迁移源。
小熊加速器官网下载安装修改 MySQL 配置
在此示例中,您将使用网络负载均衡器连接到源本地数据库。网络负载均衡器的重复健康检查可能会导致在 AWS DMS 中连接源本地数据库时发生连接问题,您可能会看到类似“ Host 10xxx is blocked because of many connection errors unblock with mysqladmin flushhosts” 的错误消息。为解决此错误,可以执行以下操作之一: 在源本地 MySQL 数据库中启用 skipnameresolve 参数。设置 skipnameresolve = 1 完全避免 DNS 主机名查找,因此不会阻止 NLB 主机。请注意:skipnameresolve 是静态参数,因此修改此值需要重启。 增加 maxconnecterrors 参数的值,并在源本地 MySQL 数据库中创建一个 MySQL 事件以执行 flush hosts。
网络配置
本地安全防火墙应允许本地网络与 AWS VPC CIDR 范围之间的进出流量。
准备目标数据库
创建数据库用户
AWS DMS 需要目标 Aurora MySQL 数据库中具有某些权限的数据库用户,以迁移数据。有关创建数据库用户和权限的更多信息,请参见 使用 MySQL 兼容数据库作为 AWS DMS 的同类数据迁移目标。

以下脚本用于在 MySQL 目标数据库中创建具有必要权限的数据库用户。
sqlCREATE USER appuser@ IDENTIFIED BY yourpasswordGRANT ALTER CREATE DROP INDEX INSERT UPDATE DELETE SELECT CREATE VIEWCREATE ROUTINE ALTER ROUTINE EVENT TRIGGER EXECUTE REFERENCES ON TO appuser@GRANT REPLICATION SLAVE REPLICATION CLIENT ON TO appuser@
AWS DMS 将为 MySQL 数据库对象指定该用户为定义者。有关使用 MySQL 兼容数据库作为同类数据迁移目标时用户名和密码的限制,请参见 使用 MySQL 兼容数据库作为同类数据迁移目标的限制。
网络配置
更新附加到目标 Aurora MySQL 集群的 VPC 安全组 datamigrationsg 的入站规则,添加 Aurora MySQL 集群所在的 Amazon VPC 的 CIDR 范围。若仅使用 AWS DMS 执行全量加载,则该规则不是必需的。AWS DMS 还会在附加到 Aurora MySQL 的安全组和实例配置文件中添加入站规则,请确保不删除或修改该规则。
修改 DB 集群参数组
在与您的 Aurora MySQL DB 集群关联的自定义 DB 集群参数组中,将 logbintrustfunctioncreators 修改为 1。有关更多信息,请参见 修改 DB 集群参数组中的参数。修改此参数后,AWS DMS 将能够在 Aurora MySQL 数据库中创建函数和触发器。
创建 AWS DMS 子网组
为 AWS DMS 实例配置文件创建一个子网组。有关更多信息,请参见 为 AWS DMS 迁移项目创建子网组。
bashaws dms createreplicationsubnetgroup replicationsubnetgroupidentifier dmssubnetgroup replicationsubnetgroupdescription Subnet group for DMS replication subnetids ltsubnetid1gt ltsubnetid2gt ltsubnetid3gt
创建网络负载均衡器
在同类数据迁移中,AWS DMS 连接到公有网络中的源数据提供者。有关更多信息,请参见 在 AWS DMS 中为同类数据迁移设置网络。然而,您可以 创建网络负载均衡器,允许 DMS 通过私有网络连接到源数据库。
配置目标组
打开 AWS 管理控制台,前往 Amazon Elastic Compute Cloud (Amazon EC2)。在导航窗格中选择 目标组Target Groups。选择 创建目标组Create target group。在 基本配置Basic configuration面板中,进行如下设置:在 选择目标类型Choose a target type中,选择 IP 地址IP addresses。在 目标组名称Target group name中,输入 mysqlmigrationtg。在 协议Protocol中,选择 TCP。在 端口Port中,输入 3306。在 IP 地址类型IP address type中,选择 IPv4。在 VPC 中,选择 targetvpc。在 健康检查协议Health check protocol中,选择 TCP。其余设置保持默认配置,选择 下一步Next。注册目标
您必须注册目标,以确保负载均衡器能将流量路由到它们。
对于 网络,选择其他私有 IP 地址。对于 可用区,选择 全部。在 输入私有 IP 地址 中,输入 源数据库主机的私有 IP 地址。在 端口 中,输入 3306。选择 包含为待处理的目标Include as pending below。配置负载均衡器和侦听器
打开 Amazon EC2 控制台。在导航窗格中选择 负载均衡器Load Balancers。选择 创建负载均衡器Create load balancer。在 网络负载均衡器Network Load Balancer下,选择 创建Create。基本配置在 负载均衡器名称 中,输入 mysqlmigrationnlb。在 方案 中,选择 内部Internal。在 IP 地址类型 中,选择 IPv4。网络映射在 VPC 中,选择用于目标 Aurora MySQL DB 集群的 targetvpc。映射选择 可用区 和对应的 私有子网,这些是用于 Aurora MySQL DB 集群和 AWS DMS 子网组的。在 私有 IPv4 地址 中,选择 从 CIDR 分配Assigned from CIDR。在 安全组 中,选择用于目标 Aurora MySQL DB 集群的安全组 datamigrationsg。侦听器和路由在 协议 中,选择 TCP。在 端口 中,输入 3306。在 默认操作 中,选择目标组 mysqlmigrationtg。其余设置保持默认配置。测试负载均衡器
通过使用网络负载均衡器的 DNS 名称连接到本地源 MySQL 数据库,测试负载均衡器。您可以使用在同一 VPC 中安装的 MySQL 客户端,连接源数据库。
bash[ec2user@lttargetawsaccountgt] mysql h ltnlbendpointgt u appuser P 3306 pEnter passwordmysqlgt
在 Secrets Manager 中为源和目标数据库创建密钥
您需要为源数据库用户 appuser 在 Secrets Manager 中创建秘密。使用网络负载均衡器 (mysqlmigrationnlb) 的 DNS 名称作为源数据库主机。
bashaws secretsmanager createsecret name mysqldbsecretsource description Credentials for onpremises MySQL database kmskeyid arnawskmsuseast2xxxxkey/xxxxx secretstring { usernameappuser passwordxxxxx enginemysql hostmysqlmigrationnlbxxxxxeast2amazonawscom port3306 dbnamemysql }
为目标数据库用户在 Secrets Manager 中创建密钥。
bashaws secretsmanager createsecret name mysqldbsecrettarget description Credentials for target Aurora MySQL database kmskeyid arnawskmsuseast2xxxxkey/xxxxx secretstring { usernameappuser passwordxxxx engineauroramysql hostauroramysqltarget01clusterxxxeast2rdsamazonawscom port3306 dbnamemysql }
创建实例配置文件
创建 AWS DMS 实例配置文件,以指定数据库迁移的网络和安全设置。您将在后续步骤中使用此实例配置文件。
打开 AWS DMS 控制台。在导航窗格中选择 实例配置文件Instance profiles。选择 创建实例配置文件Create instance profile。在 名称 中,输入 dmsinstanceprofile01。在 描述 中,输入 AWS DMS Instance Profile。在 网络类型 中,选择 IPv4。在 选择虚拟私有云 (VPC) 对于 IPv4 中,选择 VPC targetvpc。在 子网组 中,选择 dmssubnetgroup。在 VPC 安全组 中,选择 datamigrationsg。在 是否分配公共 IP 中,选择 否No。在 AWS KMS 密钥 中,选择所需的 KMS 密钥。创建数据提供者
创建 AWS DMS 数据提供者,为源本地 MySQL 数据库和目标 Aurora MySQL 数据库分别描述您的数据库。您将在后续步骤中使用这些数据提供者来执行数据迁移。
源数据提供者
打开 AWS DMS 控制台。在导航窗格中选择 数据提供者Data providers。选择 创建数据提供者Create data provider。在 名称 中,输入 sourcemysql。在 引擎类型 中,选择 MySQL。在 引擎配置 中,选择 手动输入Enter manually。在 服务器名称 中,输入之前创建的用于连接源数据库的网络负载均衡器的 DNS 名称。在 端口 中,输入 3306。对于 安全套接层SSL 模式,为简便起见选择 无none。但是,建议在生产环境中使用 verifyca 来加密连接。目标数据提供者
打开 AWS DMS 控制台。在导航窗格中选择 数据提供者Data providers。选择 创建数据提供者Create data provider。在 名称 中,输入 targetauroramysql。在 引擎类型 中,选择 Amazon Aurora MySQL。在 引擎配置 中,选择 RDS 数据库实例。在 来自 RDS 的数据库 中,选择 auroramysqltarget01。对于 安全套接层SSL 模式,为简便起见选择 无none。但是,建议在生产环境中使用 verifyca 来加密连接。创建迁移项目
创建 AWS DMS 迁移项目,使用之前创建的数据提供者。
打开 AWS DMS 控制台。在导航窗格中选择 迁移项目Migration projects。选择 创建迁移项目Create migration project。在 名称 中,输入 mysqlmigrationproject。在 实例配置文件 中,选择 dmsinstanceprofile01。源数据提供者:在 源 中,选择 sourcemysql。在 密钥 ID 中,选择 mysqldbsecretsource。在 IAM 角色 中,选择 HomogeneousDataMigrationRole。选择 为目标数据提供者使用相同的 IAM 角色Use the same IAM role for target data provider。目标数据提供者:在 源 中,