亚马逊AWS官方博客
将 Microsoft Azure SQL 数据库迁移到 Amazon Aurora MySQL 兼容版
我们为 AWS SCT 部署使用 Amazon EC2 Windows 实例。 SCT 可以本地安装在任何 Windows 或常用的 Linux 平台上。
我们将要使用的数据集是示例数据集,可在创建 Azure SQL 数据库时选择(SalesLT)。下图 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 兼容数据库包括以下步骤:
- 创建 Amazon Aurora MySQL 兼容集群
- 创建用于安装 AWS SCT 的 AWS EC2 实例
- 将 AWS SCT 连接到 Azure SQL 数据库并导入架构
- 将 Azure SQL 数据库架构转换为 MySQL 架构
- 创建 AWS DMS 复制实例
- 定义 AWS DMS 终端节点
- 创建 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 所示。
创建一个新数据库迁移项目,如图 3 所示。
在 Project Name(项目名称)字段中键入所需的项目名称。
如果尚未选择,请为 Source Engine(源引擎)选择 Azure SQL Database(Azure SQL 数据库)。
选择 Next(下一步),按照图 4 填写 Azure SQL 数据库连接详细信息。
Server Name(服务器名称) | AzureSQL 实例的服务器名称 |
Database(数据库) | AzureSQL 数据库名称 |
User name(用户名) | AzureSQL 数据库用户名 |
Password(密码) | AzureSQL 数据库密码 |
选择 Test Connection(测试连接),如果测试成功,则将以蓝色突出显示 Next(下一步)按钮。选择 Next(下一步)。如果测试未成功,请解决所有错误,然后重新选择 Test Connection(测试连接)。
注意:请记住将 AWS EC2 实例公有 IP 添加到 Azure SQL 数据库防火墙中,如下图 5 所示。
系统将确认数据库,如图 6 所示。
选择 Next(下一步),SCT 将运行数据库迁移评估。评估将提供有关不同数据库引擎之间迁移模式复杂程度的详细信息,如下图 7 所示。
选择 Next(下一步),然后键入 Aurora MySQL 兼容数据库的以下详细信息:
Server Name(服务器名称) | AzureSQL 实例的服务器名称 |
Server Port(服务器端口) | 3306(MySQL) |
User name(用户名) | Aurora MySQL 兼容数据库的用户名 |
Password(密码) | Aurora MySQL 兼容数据库的密码 |
选中 Store Password(存储密码)复选框将密码存储在 SCT 中,如图 8 所示。
现在您已经创建了新的数据库迁移项目,下一步是将源数据库的 Azure SQL 数据库架构转换为 Amazon Aurora(MySQL)架构。
选择 View(视图)按钮,然后选择 Assessment Report(评估报告)视图,如图 9 所示。
此时将显示架构迁移的摘要。选择 Action Items(操作项)选项卡以查看各个项,如图 10 所示。
展开各行以查看建议的 SQL 更改,如图 11 所示。SQL 代码可以编辑,以便根据需要进行更新。
图 11 图例:
绿色 – 自动转换
蓝色 – 需要调查和手动转换
步骤 4:将数据库架构转换为 MySQL 架构
选择源数据库(SalesLT),如下图 12 所示,右键单击并选择 Convert Schema(转换架构)。如果您收到消息 These objects might already exist in the target database.Replace?(目标数据库中可能已存在这些对象。是否替换?),选择Yes(是)。
选择目标数据库(testdb_SalesLT),如下图 13 所示,右键单击并选择 Apply to database(应用到数据库)。如果您收到消息 You chose to apply the schema definition for testdb_SalesLT.Are you sure?(您已选择为 testdb_SalesLT 应用架构定义。是否确定),选择 Yes(是)。
在此阶段,架构现已应用到目标数据库。展开右侧菜单(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(创建)按钮。
注释:
创建复制实例后,将安全组从 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 数据库关联的值。
创建配置后,如图 15 所示,展开 Test endpoint connection (optional)(测试终端节点连接(可选))。选择 VPC 和复制实例,然后选择 RUN TEST(运行测试),如图 16 所示。
VPC | AzuretoAWSDBMigTest |
Replication instance(复制实例) | azuretoawsrepl |
请确保将以上加粗斜体示例值替换为与您的具体 VPC 和复制实例关联的值。
终端节点连接测试成功后,选择图 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 兼容数据库关联的值。
创建图 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) | 推荐启用,但会产生额外费用 |
通过更新 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(在创建时自动启动),这将在创建后立即启动迁移任务 |
图 19.在 AWS Database Migration Service 中创建源/目标表映射
选择 CREATE TASK(创建任务)。
创建任务后,Azure SQL 数据库的迁移将自动开始,控制台中会显示迁移进度,如图 20 所示。选择 Identifier(标识符)并选择 Table statistics(表统计信息)选项块以查看各个表的迁移统计信息,如图 21 所示。
此时,属于指定架构的所有表及其数据都已从 Azure SQL 数据库传输到 Amazon Aurora MySQL 兼容数据库中。您可以使用自己喜欢的 MySQL 客户端(例如 MySQL Workbench)验证是否传输了所有数据。
结论
在这篇博文中,我们演示了如何使用 AWS Schema Conversion Tool 和 AWS Data Migration Service,将数据库架构和数据从 AzureSQL 迁移到 Amazon Aurora MySQL 兼容数据库。试试吧!