亚马逊AWS官方博客
使用 AWS DMS 将 Google Cloud for MySQL 迁移到 Amazon Aurora MySQL
Original URL: https://aws.amazon.com/blogs/database/migrate-google-cloud-for-mysql-to-amazon-aurora-mysql/
解决方案概览
对于不具有 SSL 的 Google Cloud for MySQL 数据库,我们使用 AWS Schema Conversion Tool(AWS SCT)将源架构转换为目标 Aurora MySQL 数据库。我们使用 AWS DMS 在 Google Cloud for MySQL 和 Aurora MySQL 之间迁移数据,并为增量更改启用更改数据捕获(CDC,Change Data Capture)。
对于具有 SSL 的 Google Cloud for MySQL 数据库,我们在独立的 Amazon Elastic Compute Cloud(Amazon EC2)实例上安装非 SSL MySQL 代理。AWS DMS 连接到此代理 MySQL 实例,以便与源 Google Cloud for MySQL 数据库进行通信。这使我们能够将数据从支持 SSL 的 Google Cloud for MySQL 数据库迁移到 Aurora MySQL。您必须通过 Internet 从您的 AWS 环境访问 Google Cloud for MySQL 数据库,但该流量在传输过程中会使用 SSL 进行加密。
下图显示了总体解决方案的架构。
对于此迁移,我们使用了简单的客户-产品-订单表结构和以下数据集。下图显示了该示例数据集的实体关系。图中包含“客户”、“产品”和“订单”这三个表。“订单”具有两个外键,一个来自“客户”表,另一个来自“产品”表。
先决条件
在此演练中,您应满足以下先决条件:
- 一个现有的 Google Cloud for MySQL 数据库与公共连接
- 一个 AWS 账户
- 一个充当目标的 Aurora MySQL 数据库
在使用所述服务时,您的账户中会产生与此解决方案相关的费用。
第 1 部分:迁移不具有 SSL 的 Google Cloud for MySQL 数据库
对于同构迁移,特别是那些不需要捕获正在进行的更改的迁移,我们建议使用 MySQL 本机工具,例如 mysqldump 和 MySQL Workbench 数据导出和导入向导。如果源是另一个数据库引擎,例如 Google Cloud for SQL Server,则需要使用 AWS SCT 转换架构。但是,即使对于这种同构迁移(Google Cloud for MySQL 到 Aurora MySQL 的迁移),我们也会在开始迁移之前使用 AWS SCT 将架构更改应用于目标。下图显示了架构。
您可以采用类似方法进行异构迁移(例如,从Google Cloud for MySQL 迁移到 Amazon Aurora PostgreSQL 兼容版)。
安装 AWS SCT
AWS SCT 是一款免费应用程序,您可以将它安装在本地服务器、本地工作站或 EC2 实例上。有关安装说明,请参阅安装、验证和更新 AWS SCT。在本博文中,我们创建了一个 t3.medium EC2 实例并在其中安装此工具。
创建 AWS DMS 复制实例
您需要使用复制实例来迁移数据库。此实例需要足够的存储空间和处理能力才能执行您分配的任务,并将数据从源数据库迁移到目标数据库。要选择适当的实例,请参阅使用 AWS DMS 复制实例。
首先,让我们创建一个基本实例。我们按如下方式设置参数:
- 在 Name(名称)中,输入唯一标识此实例的友好名称。
- 对于 Instance class(实例类),根据您的工作负载选择一个实例。
- 对于 Engine version(引擎版本),我们建议选择最新版本。
- 对于 Allocated storage(分配的存储空间),根据您的工作负载选择存储空间。
- 对于 VPC,选择要在其中放置此实例的 VPC。
- 建议为生产工作负载选择 Multi-AZ(多可用区)。
- 选择 Publicly accessible(公开访问)设置,因为此实例需要通过 Internet 与 Google Cloud 进行通信。
创建目标 Aurora MySQL 实例
如果您已有一个 Aurora MySQL 实例,则可使用它。如果没有,请创建一个 Aurora MySQL 集群。确保目标拥有 AWS SCT 和 AWS DMS 权限。AWS SCT 需要以下额外权限才能将架构应用于目标:
在 Google Cloud 上配置网络更改
要确保 Amazon EC2 上运行的 AWS DMS 实例和 AWS SCT 能够连接到 Google Cloud for MySQL 实例,请确保该实例具有公有 IP。在 Authorized networks(授权网络)下添加 AWS DMS 复制实例和 AWS SCT EC2 实例的公有 IP。下图显示了配置。
配置源 MySQL 更改
我们创建一个数据库用户,并使用最低权限原则以仅分配任务所需的权限:
要让 AWS SCT 正确读取架构,您需要添加以下权限:
如果您还想捕获 AWS DMS 任务中正在进行的更改,则需要添加以下权限:
执行架构转换
现在可以将源架构应用于目标了。
- 连接到安装了 AWS SCT 的 EC2 实例。
- 打开 AWS SCT 应用程序,然后在 File(文件)菜单上选择 New Project Wizard(新建项目向导)。
- 对于 Project name(项目名称),输入相应的名称。
- 对于 Location(位置),请在本地计算机上选择适当的位置。
- 对于 Kind(类型),选择 SQL Database(SQL 数据库)。
- 对于 Source engine(源引擎),选择 MySQL。
- 对于 Migration(迁移),选择 I want to keep the same engine but optimize for the cloud(我想保留同一引擎,但针对云进行优化)。
- 选择 Next(下一步)。
- 对于 Connection name(连接名称),输入相应的名称。
- 对于 Server name(服务器名称),选择源 Google Cloud for MySQL 公有 IP。
- 对于 Server port(服务器端口),如果使用的是默认端口,则使用 3306。
- 输入您创建的用户名和密码作为先决条件。
- 选择 Next(下一步)。
建立源连接后,它会显示 MySQL 用户有权访问的所有架构。
- 选择要迁移的架构,然后选择 Next(下一步)。
数据库迁移评估报告汇总所有架构转换任务,并针对无法转换为目标数据库实例的数据库引擎的架构对象,详细说明了操作项。由于这是同构迁移,因此,迁移评估可能不会提供很多操作项,如以下屏幕截图所示。
现在您可以配置目标了。
- 对于 Name(名称),输入 Aurora MySQL DNS。
- 对于 Server port(服务器端口),如果使用的是默认端口,则使用 3306。
- 输入具有相应写入权限的用户的用户名和密码。
- 选择 Finish(完成)以结束向导。
由于在转换或调整源架构方面没有操作项,因此,您可以直接将架构从源加载到目标,如以下屏幕截图所示。
选择(右键单击)目标架构,然后选择 Apply to database(应用于数据库)。
对象的顶部会显示一个保存图标,这表示它们已应用于目标数据库。
现在,源架构已应用于目标,可以创建 AWS DMS 端点和任务了。
创建 AWS DMS 端点
端点提供有关源和目标的连接、数据存储类型和位置信息。您需要创建至少一个源端点和一个目标端点。
源端点
创建源端点时,请提供以下信息:
- 对于 Endpoint identifier(端点标识符),输入一个友好名称。
- 对于 Source engine(源引擎),选择 Google Cloud for MySQL。
- 对于 Access to endpoint(对端点的访问),选择 Provide access information manually(手动提供访问信息)。
- 对于 Server name(服务器名称),输入 Cloud SQL 的 IP 地址。
- 对于 Port(端口),如果使用的是默认端口,则使用 3306。
- 输入相应的用户名和密码。
- 测试端点,然后完成端点创建。
目标端点
使用目标端点的以下参数重复上一过程:
- 对于 Select RDS instance(选择 RDS 实例),选择 Aurora MySQL 实例。
- 对于 Access to endpoint(对端点的访问),选择 Provide access information manually(手动提供访问信息)。
- 对于 Server name(服务器名称),使用预填充的设置。
- 对于 Port(端口),如果使用的是默认端口,则使用 3306。
- 输入相应的用户名和密码。
- 测试端点,然后完成端点创建。
创建 AWS DMS 迁移任务
AWS DMS 任务是所有工作发生的位置。您可以在该任务中配置要迁移的数据库对象、日志记录要求、错误处理等。创建任务时,请提供以下信息:
- 对于 Task identifier(任务标识符),输入一个友好的可识别名称。
- 对于 Replication instance(复制实例),选择您创建的实例。
- 对于 Source database endpoint(源数据库端点),选择您创建的 Google Cloud for MySQL 端点。
- 对于 Target database endpoint(目标数据库端点),选择您创建的 Aurora MySQL 端点。
- 对于 Migration type(迁移类型),选择 Migrate existing data and replicate ongoing changes(迁移现有数据并复制正在进行的变更)。
- 启用 Amazon CloudWatch Logs,以便能够调试问题。
- 对于 Table mappings(表映射),选择 Wizard(向导)。
- 选择要迁移的架构。
- 将所有其他内容保留为默认值,然后选择 Create task(创建任务)。
一旦创建任务,任务就会处于 Creating(正在创建)状态。几秒钟后,它会变为 Ready(准备就绪)状态。迁移过程(如果已启用 CDC)将自动启动。
加载完成后,导航到 Table statistics(表统计数据)选项卡,如以下屏幕截图所示。
如果复制正在进行的更改,请尝试在源上插入新记录以查看统计信息中更新的“插入”列,如以下屏幕截图的最后一行所示。
您可能需要使用 MySQL Workbench 等工具连接到目标。另外,您可能需要执行数据验证。如果源和目标之间的计数达到您的要求,可随意将您的应用程序指向 Aurora MySQL 数据库,然后关闭源 Google Cloud for MySQL 数据库。
第 2 部分:迁移支持 SSL 的 Google Cloud for MySQL 数据库
截至撰写本文时,AWS DMS 不支持 Google Cloud for MySQL 设置 Allow only SSL connections(仅允许 SSL 连接)。 一种解决此限制的可能方法是在已知的安全环境中创建 MySQL 代理。该代理接受非 SSL 连接,但使用 SSL 连接到源 Google Cloud for MySQL 数据库。已安装 MySQL 代理的 EC2 实例可为您完成这项工作。
我们使用 ProxySQL,它是一款适用于 MySQL 的开源、高性能、高度可用的数据库协议感知代理。下图显示了架构。
安装 ProxySQL
以下说明适用于 Amazon Linux AMI。对于其他 Linux 发行版,您可以使用类似的方法。如果您没有可用的实例,请启动一个实例。大小和实例类型取决于各种因素,例如,存在的数据量以及所需的迁移完成速度。
在实例准备就绪时,请确保允许 SSH 流量(此流量来自连接源)。SSH 将进入实例并运行以下命令。这些命令从 yum 存储库获取 ProxySQL 并安装它,并且还会安装 MySQL。您可能需要针对不同的 Linux 发行版略做调整。
如果一切顺利,您现在应已登录 ProxySQL。
我们建议将 ProxySQL 管理员的默认密码从 admin 更改为其他内容:
创建 AWS DMS 复制实例
如前所述,您需要使用复制实例来迁移数据库。此实例需要足够的存储空间和处理能力才能执行您分配的任务,并将数据从源数据库迁移到目标数据库。要选择适当的实例,请参阅使用 AWS DMS 复制实例。
使用以下参数创建您的实例:
- 在 Name(名称)中,输入唯一标识此实例的友好名称。
- 对于 Instance class(实例类),根据您的工作负载选择一个实例。
- 对于 Engine version(引擎版本),我们建议选择最新版本。
- 对于 Allocated storage(分配的存储空间),根据您的工作负载选择存储空间。
- 对于 VPC,选择要在其中放置此实例的 VPC。
- 建议为生产工作负载选择 Multi-AZ(多可用区)。
- 取消选择 Publicly accessible(公开访问)设置
创建目标 Aurora MySQL 实例
如果您已有一个 Aurora MySQL 实例,则可使用它。如果没有,请创建一个 Aurora MySQL 集群。确保目标拥有 AWS DMS 权限。
在 Google Cloud for MySQL 上配置联网、安全性和用户权限
在 Google Cloud Platform(GCP)控制台上,导航到要迁移的 MySQL 集群下的联网部分,然后完成以下步骤:
- 添加正在运行 ProxySQL 的 EC2 实例的公有 IP,以便流量可以从该公有 IP 到达。
- 在 Security(安全性)选项卡上,选择 Allow only SSL connections(仅允许 SSL 连接)。
- 如果您还没有客户端证书,请生成该证书。
- 下载服务器证书和客户端证书。
- 在源 MySQL 数据库上,创建两个用户:一个是由 AWS DMS 用来迁移数据的
dmsuser
,另一个是由 ProxySQL 用来监控连接的监控用户:
配置 ProxySQL
以下命令可配置您的 ProxySQL 实例,确保它能够连接到源 Google Cloud for MySQL 数据库。您需要添加服务器信息、用户信息和 SSL 证书,还需要创建一个监控用户,此用户对源进行 ping 操作以确保其处于联机状态。您应在 ProxySQLAdmin 提示符下运行这些命令。如果您在 ProxySQL EC2 实例上将其丢失,请运行以下代码:
- 在
mysql_servers
表中插入源 MySQL 信息: - 将服务器加载到运行时并将其保存到磁盘:
- 在
mysql_users
表中插入dmsuser
: - 将用户加载到运行时并将其保存到磁盘:
- 将您从 GCP 下载的 SSL 证书复制到
/var/lib/proxysql
目录中。上述命令将从本地计算机(MacOS 终端)复制这些文件。如果您未在 MacOS 上,请按照本地计算机的操作系统的推荐说明执行操作。 - 它们将位于 ProxySQL 的 EC2 实例的主目录中,因此将它们复制到
/var/lib/proxysql
: - 运行以下查询,为 SSL 设置各种变量并监控 ProxySQL 中的 Google Cloud for MySQL 数据库:
- 在 MySQL 连接日志上运行 SELECT,确保您能够成功连接到源 Google Cloud for MySQL 数据库:
以下屏幕截图显示 ProxySQL 正在成功地与源数据库进行交互。
创建 AWS DMS 端点
如前所述,端点提供有关源和目标的连接、数据存储类型和位置信息。您需要创建至少一个源端点和一个目标端点。
源端点
由于您已在 Google Cloud for MySQL 数据库上运行一个非 SSL 代理,因此,您可以将其配置为源,如下所示:
- 对于 Endpoint identifier(端点标识符),输入一个友好名称。
- 对于 Source engine(源引擎),选择 MySQL。
- 对于 Access to endpoint(对端点的访问),选择 Provide access information manually(手动提供访问信息)。
- 对于 Server name(服务器名称),输入运行 ProxySQL 的 EC2 实例的 IP 地址。
- 对于 Port(端口),如果使用的是默认端口,则使用 3306。
- 输入相应的用户名和密码。
- 测试端点,然后完成端点创建。
目标端点
使用目标端点的以下参数重复此过程:
- 对于 Select RDS instance(选择 RDS 实例),选择 Aurora MySQL 实例。
- 对于 Access to endpoint(对端点的访问),选择 Provide access information manually(手动提供访问信息)。
- 对于 Server name(服务器名称),使用预填充的设置。
- 对于 Port(端口),如果使用的是默认端口,则使用 3306。
- 输入相应的用户名和密码。
- 测试端点,然后完成端点创建。
创建 AWS DMS 任务
如前所述,您可以在 AWS DMS 任务中配置要迁移的数据库对象、日志记录要求、错误处理等。使用以下信息创建任务:
- 对于 Task identifier(任务标识符),输入一个友好的可识别名称。
- 对于 Replication instance(复制实例),选择您创建的实例。
- 对于 Source database endpoint(源数据库端点),选择您创建的 ProxySQL MySQL 端点。
- 对于 Target database endpoint(目标数据库端点),选择您创建的 Aurora MySQL 端点。
- 对于 Migration type(迁移类型),选择 Migrate existing data(迁移现有数据)。
- 启用 CloudWatch Logs,以便能够调试问题。
- 对于 Table mappings(表映射),选择 Wizard(向导)。
- 选择要迁移的架构。
- 将所有其他内容保留为默认值,然后选择 Create task(创建任务)。
一旦创建任务,任务就会处于 Creating(正在创建)状态。几秒钟后,它会变为 Ready(准备就绪)状态。迁移将自动启动。
加载完成后,导航到 Table statistics(表统计数据)选项卡,如以下屏幕截图所示。
您可能需要使用 MySQL Workbench 等工具连接到目标。另外,您可能需要执行数据验证。如果源和目标之间的计数达到您的要求,可随意将您的应用程序指向 Aurora MySQL 数据库。
清理
停止正在运行 AWS SCT 和 ProxySQL 的 EC2 实例。此外,删除这些实例的关联安全组,或删除不再需要的规则。如果您不再需要 DMS 实例,请将其删除。
结论
在本博文中,我们说明了如何使用 AWS SCT 和 AWS DMS 将数据库和架构从 Google Cloud for MySQL(具有或不具有 SSL)迁移到 Aurora MYSQL。请试用此解决方案,如果您有任何意见,请告诉我们。
查看来自采用了类似方法的客户的博客文章:使用 AWS DMS 从 GCP 迁移到 AWS,为 OLX Autos 的平台做好准备
关于作者
Kasi Muthu 是 AWS 在德克萨斯州休斯敦的全球合作伙伴解决方案架构师,专注于数据库、分析以及人工智能/机器学习。他热衷于帮助合作伙伴和客户加速其云数据之旅。他是这个领域值得信赖的顾问,并且在云上架构和构建可扩展、弹性和高性能工作负载方面拥有丰富的经验。工作之余,他喜欢和家人在一起,并将大量空闲时间花在浏览 YouTube 上。