亚马逊AWS官方博客

将 Microsoft Azure SQL 数据库迁移到 Amazon Aurora MySQL 兼容版

在迁移 Microsoft Azure SQL 数据库时,通常需要使用数据库工具从 Azure SQL 数据库中提取数据,针对目标数据库进行必要的架构更改,然后将数据导入目标数据库。这一般会涉及到手动步骤,并且源应用程序需要停机较长的时间。如果有一种方法可以快速安全地从 Azure SQL 迁移到  Amazon Aurora MySQL 兼容版,同时最大限度地减少应用程序停机时间和用户干预工作,那会怎么样?本博文介绍了如何快速、安全地自动从 Microsoft Azure SQL 数据库迁移到 Amazon Aurora MySQL 兼容版,并最大限度地减少依赖 Microsoft Azure SQL 数据库的应用程序的停机时间。在下文中,我们假设您现有一个 Microsoft Azure SQL 数据库,需要将其迁移到 Amazon Aurora MySQL 兼容版。您将需要对 Azure SQL 数据库的管理员访问权限,以及连接信息、用户名和密码。您还需要修改 Azure SQL 数据库防火墙,以允许来自  AWS Database Migration Service(AWS DMS)和托管  AWS Schema Conversion Tool(AWS SCT)的  Amazon Elastic Compute Cloud(Amazon EC2)实例的访问。对于目标数据库,我们将使用 Amazon Aurora MySQL 兼容版。

我们为 AWS SCT 部署使用 Amazon EC2 Windows 实例。 SCT 可以本地安装在任何 Windows 或常用的 Linux 平台上。

我们将要使用的数据集是示例数据集,可在创建 Azure SQL 数据库时选择(SalesLT)。下图 1 说明了用于迁移的 Azure/AWS 服务。

使用的 Azure/AWS 服务

图 1.使用的 Azure/AWS 服务

架构转换

在异构数据库迁移中,转换数据库架构和代码对象通常是最耗时的操作。AWS SCT 是一款易用的应用程序,您可以将其安装在本地部署服务器、本地笔记本电脑/台式机或 Amazon EC2 实例上。SCT 可检查源数据库架构,并自动将大多数数据库代码对象(包括视图、存储过程和函数)转换为与目标数据库兼容的格式,帮助简化异构数据库迁移。SCT 无法自动转换的任何对象都将标有详细信息,可供您用来手动转换对象。

数据迁移

完成架构转换后,您需要移动数据本身。对于生产数据库,您可能无法承受迁移期间的任何停机时间。要实现接近于零的迁移停机时间,您可能需要在将应用程序切换到新的目标数据库之前,确保源数据库和目标数据库同步

AWS Database Migration Service(AWS DMS)可帮助您轻松安全地将数据从源数据库迁移到目标数据库。AWS DMS 支持在使用最广泛的商业与开源数据库之间进行往返数据迁移。在我们的示例中,源数据库位于 Azure SQL 中,目标数据库将托管在 Aurora MySQL 兼容版上。此外,源数据库在迁移期间保持完全正常运行,从而最大限度地减少依赖该数据库的应用程序的停机时间。

迁移过程

将 Azure SQL 数据库迁移到 Aurora MySQL 兼容数据库包括以下步骤:

  1. 创建 Amazon Aurora MySQL 兼容集群
  2. 创建用于安装 AWS SCT 的 AWS EC2 实例
  3. 将 AWS SCT 连接到 Azure SQL 数据库并导入架构
  4. 将 Azure SQL 数据库架构转换为 MySQL 架构
  5. 创建 AWS DMS 复制实例
  6. 定义 AWS DMS 终端节点
  7. 创建 AWS DMS 迁移任务

步骤 1:创建 Amazon Aurora MySQL 兼容集群

如果您已经拥有要用作迁移目标的 Aurora MySQL 集群,即可直接使用。如果您要创建新 Aurora MySQL 集群,请参阅创建 Amazon Aurora 数据库集群中的详细说明。

步骤 2:创建用于安装 AWS Schema Conversation Tool(AWS SCT)的 AWS EC2 实例

创建 EC2 实例时,请选择 t3.medium 实例类型以及 Windows Server 2016 或更高版本作为操作系统。有关如何创建 EC2 实例的介绍,请参阅 Amazon Elastic Compute Cloud Windows 实例用户指南

有关如何安装 AWS SCT 的信息,请参阅安装、验证和更新 AWS SCT

步骤 3:将 AWS SCT 连接到 Azure SQL 数据库并导入架构

打开 SCT 控制台,然后选择 File, New project wizard(文件,新建项目向导),如图 2 所示。

打开新 SCT 项目

图 2.打开新的架构转换项目

创建一个新数据库迁移项目,如图 3 所示。

新 AWS SCT 项目

图 3.创建新的数据库迁移项目

在 Project Name(项目名称)字段中键入所需的项目名称。
如果尚未选择,请为 Source Engine(源引擎)选择 Azure SQL Database(Azure SQL 数据库)。
选择 Next(下一步),按照图 4 填写 Azure SQL 数据库连接详细信息。

Server Name(服务器名称) AzureSQL 实例的服务器名称
Database(数据库) AzureSQL 数据库名称
User name(用户名) AzureSQL 数据库用户名
Password(密码) AzureSQL 数据库密码
 

从 AWS SCT 连接到 AzureSQL

图 4.连接到源数据库

选择 Test Connection(测试连接),如果测试成功,则将以蓝色突出显示 Next(下一步)按钮。选择 Next(下一步)。如果测试未成功,请解决所有错误,然后重新选择 Test Connection(测试连接)。

注意:请记住将 AWS EC2 实例公有 IP 添加到 Azure SQL 数据库防火墙中,如下图 5 所示。

为 SCT 访问配置 AzureSQL 防火墙

图 5.配置 AzureDB 防火墙以允许访问

系统将确认数据库,如图 6 所示。

AWS SCT 成功连接到 AzureSQL

图 6.成功连接到源数据库

选择 Next(下一步),SCT 将运行数据库迁移评估。评估将提供有关不同数据库引擎之间迁移模式复杂程度的详细信息,如下图 7 所示。

AWS SCT 评估报告

图 7.SCT 评估报告

选择 Next(下一步),然后键入 Aurora MySQL 兼容数据库的以下详细信息:

Server Name(服务器名称) AzureSQL 实例的服务器名称
Server Port(服务器端口) 3306(MySQL)
User name(用户名) Aurora MySQL 兼容数据库的用户名
Password(密码) Aurora MySQL 兼容数据库的密码

选中 Store Password(存储密码)复选框将密码存储在 SCT 中,如图 8 所示。

SCTtoRDS 连接

图 8.连接到目标数据库

现在您已经创建了新的数据库迁移项目,下一步是将源数据库的 Azure SQL 数据库架构转换为 Amazon Aurora(MySQL)架构。

选择 View(视图)按钮,然后选择 Assessment Report(评估报告)视图,如图 9 所示。

SCT 迁移报告摘要

图 9.数据库迁移评估报告

此时将显示架构迁移的摘要。选择 Action Items(操作项)选项卡以查看各个项,如图 10 所示。

用于转换的 SCT 操作概览报告摘要

图 10.操作项的摘要视图

展开各行以查看建议的 SQL 更改,如图 11 所示。SQL 代码可以编辑,以便根据需要进行更新。

详细的 SCT 操作报告

图 11.每个操作项的详细视图

图 11 图例:
绿色 – 自动转换
蓝色 – 需要调查和手动转换

步骤 4:将数据库架构转换为 MySQL 架构

选择源数据库(SalesLT),如下图 12 所示,右键单击并选择 Convert Schema(转换架构)。如果您收到消息 These objects might already exist in the target database.Replace?(目标数据库中可能已存在这些对象。是否替换?),选择Yes(是)。

通过 SCT 转换源数据库

图 12.转换源数据库

选择目标数据库(testdb_SalesLT),如下图 13 所示,右键单击并选择 Apply to database(应用到数据库)。如果您收到消息 You chose to apply the schema definition for testdb_SalesLT.Are you sure?(您已选择为 testdb_SalesLT 应用架构定义。是否确定),选择 Yes(是)。

将转换应用到目标数据库

图 13.将转换应用到目标数据库

在此阶段,架构现已应用到目标数据库。展开右侧菜单(Target(目标)),现在可以看到转换后的架构。

步骤 5:创建 AWS DMS 复制实例

导航到 AWS 管理控制台,登录您的 AWS 账户,然后在搜索栏中输入 Database Migration Service。选择 Database Migration Service 结果,然后系统会将您转到 AWS DMS 页面(参见下图 14),在该页面中,您将选择 Create replication instance(创建复制实例),然后以下表中的信息作为指导完成设置:

Name(名称) 实例的唯一名称
Descriptive Amazon Resource Name(描述性 Amazon 资源名称) 实例的友好名称
Description(描述) 实例描述
Instance class(实例类) 实例大小,更多详细信息见此处
Description(描述) 实例描述
Engine version(引擎版本) 3.4.5 或最新版本
Allocated storage(分配的存储空间) 50GB 或所需的存储空间
VPC 实例的 VPC
Multi AZ(多可用区) 开发或测试工作负载(单可用区)
Public accessible(可公开访问) 勾选

完成配置后(如图 14 所示),选择 CREATE(创建)按钮。

创建 DMS 复制实例

图 14.创建复制实例

注释:
创建复制实例后,将安全组从 Default(原定设置)更改为所需的安全组。对于测试用途,可以将其保留为 Default(原定设置)。
将 DMS 实例公有 IP 添加到 Azure SQL 数据库防火墙以允许访问。

步骤 6:定义 AWS DMS 终端节点

登录 AWS 管理控制台后,导航到 AWS DMS 并选择 Endpoints(终端节点),然后创建以下源终端节点:

Source Endpoint(源终端节点) 单击单选按钮
Endpoint type(终端节点类型) Source endpoint(源终端节点)
Endpoint identifier(终端节点标识符) azuresqldb
Descriptive Amazon Resource Name(描述性 Amazon 资源名称) 友好名称(可选)
Source engine(源引擎) Microsoft Azure SQL Database(Microsoft Azure SQL 数据库)
Server name(服务器名称) markbtest.database.windows.net
Port(端口) 1433
SSL none(无)
User Name(用户名) DBUser
Password(密码) DBPassword
Database Name(数据库名称) TestDB

请确保将以上加粗斜体示例值替换为与您的具体 AzureSQL 数据库关联的值。

创建 AzureSQL 的源终端节点

图 15.使用 AzureSQL 连接详细信息创建源终端节点

创建配置后,如图 15 所示,展开 Test endpoint connection (optional)(测试终端节点连接(可选))。选择 VPC 和复制实例,然后选择 RUN TEST(运行测试),如图 16 所示。

VPC AzuretoAWSDBMigTest
Replication instance(复制实例) azuretoawsrepl

请确保将以上加粗斜体示例值替换为与您的具体 VPC 和复制实例关联的值。

测试 AWS DMS 连接

图 16.测试与源终端节点的连接

终端节点连接测试成功后,选择图 15 中的 CREATE ENDPOINT(创建终端节点)按钮。

登录 AWS 管理控制台后,导航到 AWS DMS,选择 Endpoint(终端节点),然后创建以下目标终端节点:

Target Endpoint(目标终端节点) 单击单选按钮
Endpoint type(终端节点类型) Target endpoint(目标终端节点)
Select RDS DB Instance(选择 RDS 数据库实例) 勾选
RDS instance(RDS 实例) Aurora MySQL 集群
Endpoint identifier(终端节点标识符) AmazonAuroraMysql-Compatible
Descriptive Amazon Resource Name(描述性 Amazon 资源名称) 友好名称(可选)
Source engine(源引擎) Amazon Aurora MySQL
Server name(服务器名称) database-2.cluster-ro-ctkyednz0sde.eu-north-1.rds.amazonaws.com
Port(端口) 3306
Secure Socket Layer mode(安全套接字层模式)
User name(用户名) dbUSer
Password(密码) DBPassword

请确保将以上加粗斜体示例值替换为与您的具体 Amazon Aurora MySQL 兼容数据库关联的值。

与 Aurora 连接的 AWS DMS 终端节点创建

图 17.使用 Amazon Aurora MySQL 兼容连接详细信息创建目标终端节点

创建图 17 中的配置后,展开 Test endpoint connection (optional)(测试终端节点连接(可选))。选择 VPC 和复制实例,然后选择 RUN TEST(运行测试),如图 16 所示。

VPC AzuretoAWSDBMigTest
Replication instance(复制实例) azuretoawsrepl

请确保将以上加粗斜体示例值替换为与您的具体 VPC 和复制实例关联的值。

终端节点连接测试成功后,选择图 17 中的 CREATE ENDPOINT(创建终端节点)按钮。

步骤 7:创建 AWS DMS 迁移任务

登录到 AWS 管理控制台后,导航到 Database Migration Task(数据库迁移任务)并选择 CREATE TASK(创建任务)以创建以下任务,如图 18 所示。

Task configuration(任务配置) 窗口的标题
Task identifier(任务标识符) 任务的唯一名称
Descriptive ARN(描述性 ARN) 可选的友好名称
Replication instance(复制实例) 上文中创建的复制实例
Endpoint identifier(终端节点标识符) AmazonAuroraMysql-Compatible
Descriptive Amazon Resource Name(描述性 Amazon 资源名称) 友好名称(可选)
Source database endpoint(源数据库终端节点) 上文创建的源数据库终端节点(Azure SQL 数据库)
Target database endpoint(目标数据库终端节点) 上文创建的目标数据库终端节点(AWS Aurora)
Migration type(迁移类型) 迁移现有数据,使用 Azure SQL DB 作为源时无法进行连续复制
Task settings(任务设置) 窗口的标题
Target table preparation(目标表准备) Truncate(截断),确保表为空
Include LOB (Large objects)(包含 LOB(大对象)) Limited LOB mode(受限的 LOB 模式)
Enable Validation(启用验证) 将 Azure SQL 数据库作为源时不可用
Enable CloudWatch logs(启用 CloudWatch Logs) 推荐启用,但会产生额外费用

创建 AWS DMS 实例

图 18.创建 Database Migration Service

通过更新 Table Mappings(表映射)部分来完成 Database Migration Service 配置,如图 19 所示。

Table Mappings(表映射) 单击 Wiazrd(向导)单选按钮
Add new selection rule(添加新选择规则) 选择要包含的架构项,例如
Schema(架构):Enter a schema(输入架构)
Schema name(架构名称):SalesLT
Table name(表名):%
Action(操作):Include(包含)
Add transformation rule(添加转换规则) 选择所需的转换,例如
Target(目标):schema
Schema name(架构名称):Enter a schema(输入架构)
Schema name(架构名称):SalesLT
Action(操作):Rename to(重命名为)
Value(值):testdb_saleslt
这会将源架构(SalesLT)重命名为目标架构(testdb_saleslt)
Premigration assessment(迁移前评估) 子窗口的标题
Enable premigration assessment run(启用迁移前评估运行) 不需要
Migration task startup config(迁移任务启动配置) 子窗口的标题
Start migration task(启动迁移任务) Automatically on create(在创建时自动启动),这将在创建后立即启动迁移任务

DMS 源目标表映射

图 19.在 AWS Database Migration Service 中创建源/目标表映射

选择 CREATE TASK(创建任务)。

创建任务后,Azure SQL 数据库的迁移将自动开始,控制台中会显示迁移进度,如图 20 所示。选择 Identifier(标识符)并选择 Table statistics(表统计信息)选项块以查看各个表的迁移统计信息,如图 21 所示。

AWS DMS 迁移状态窗口

图 20.数据迁移状态

AWS DMS 迁移后统计信息状态

图 21.表迁移统计信息

此时,属于指定架构的所有表及其数据都已从 Azure SQL 数据库传输到 Amazon Aurora MySQL 兼容数据库中。您可以使用自己喜欢的 MySQL 客户端(例如 MySQL Workbench)验证是否传输了所有数据。

结论

在这篇博文中,我们演示了如何使用 AWS Schema Conversion Tool 和 AWS Data Migration Service,将数据库架构和数据从 AzureSQL 迁移到 Amazon Aurora MySQL 兼容数据库。试试吧!

本篇作者

Ravin Mathoora

Ravin Mathoora 是 AWS 的解决方案架构师。他与客户合作,以可持续性为指导设计原则,迁移工作负载并实现现代化改造。

Mark Brealey

Mark Brealey 是一名迁移解决方案高级架构师,为欧洲、中东和非洲区域的 AWS 合作伙伴提供帮助。他与 AWS 客户合作,在云上设计可扩展、安全、高性能且可靠的架构。