教程:使用 DMS 将 MySQL 脱机迁移到 Azure Database for MySQL
可以使用 Azure 数据库迁移服务通过高速数据迁移功能执行从外部 MySQL 实例到 Azure Database for MySQL 的无缝迁移。 本教程介绍如何在 Azure 数据库迁移服务中使用脱机迁移活动将示例数据库从 MySQL 5.7 的本地实例迁移到 Azure Database for MySQL (v5.7)。 虽然本文假设源为 MySQL 数据库实例,目标为 Azure Database for MySQL,但只需更改源服务器名称和凭据,本文即可用于在 Azure Database for MySQL 之间迁移。 此外,还支持从低版本的 MySQL 服务器(5.6 和更高版本)迁移到高版本。
注意
有关此迁移体验的基于 PowerShell 的可编写脚本版本,请参阅以可编写脚本的方式脱机迁移到 Azure Database for MySQL。
另外,支持 Amazon Relational Database Service (RDS) for MySQL 和 Amazon Aurora(基于 MySQL)作为源进行迁移。
本教程介绍如何执行下列操作:
- 创建 DMS 实例。
- 在 DMS 中创建 MySQL 迁移项目。
- 使用 DMS 迁移 MySQL 架构。
- 运行迁移。
- 监视迁移。
先决条件
要完成本教程,需要:
具有活动订阅的 Azure 帐户。 创建试用帐户。
具有 5.7 版本的本地 MySQL 数据库。 如果没有,请下载并安装 MySQL 社区版 5.7。
使用 Azure 资源管理器部署模型创建 Azure 数据库迁移服务的 Azure 虚拟网络,该网络将使用 ExpressRoute 或 VPN 提供与本地源服务器的站点到站点连接。 有关创建虚拟网络的详细信息,请参阅虚拟网络文档,尤其是提供了分步详细信息的快速入门文章。
在虚拟网络 (VNet) 设置期间,如果将 ExpressRoute 与 Azure 的网络对等互连一起使用,则请将以下服务终结点添加到要在其中预配该服务的子网:
- 目标数据库终结点(例如 SQL 终结点、Azure Cosmos DB 终结点等)
- 存储终结点
- 服务总线终结点
Azure 数据库迁移服务缺少 Internet 连接,因此必须提供此配置。
请确保虚拟网络的网络安全组规则不阻止 ServiceBus、存储服务和 AzureMonitor 的 ServiceTag 出站端口 443。 有关虚拟网络 NSG 流量筛选的更多详细信息,请参阅使用网络安全组筛选网络流量一文。
打开 Windows 防火墙,使 Azure 数据库迁移服务的虚拟网络发出的连接能够访问源 MySQL 服务器(默认情况下为 TCP 端口 3306)。
在源数据库的前面使用了防火墙设备时,可能需要添加防火墙规则以允许 Azure 数据库迁移服务的虚拟网络发出的连接访问要迁移的源数据库。
为目标 Azure Database for MySQL 创建服务器级别的防火墙规则或配置 VNET 服务器终结点,以允许 Azure 数据迁移服务的虚拟机网络访问目标数据库。
源 MySQL 必须使用支持的 MySQL 社区版。 若要确定 MySQL 实例的版本,请在 MySQL 实用程序或 MySQL Workbench 中运行以下命令:
SELECT @@VERSION;
Azure Database for MySQL 仅支持 InnoDB 表。 若要将 MyISAM 表转换为 InnoDB,请参阅 Converting Tables from MyISAM to InnoDB(将表从 MyISAM 转换为 InnoDB)一文
用户必须具有读取源数据库上数据的权限。
若要成功完成架构迁移,执行迁移的用户需要在源服务器上拥有以下特权:
- 源上服务器级别的“SELECT”特权。
- 如果要迁移视图,用户必须拥有源服务器上的“SHOW VIEW”特权和目标服务器上的“CREATE VIEW”特权。
- 如果要迁移触发器,用户必须拥有源和目标服务器上的“TRIGGER”特权。
- 如果要迁移例程(过程和/或函数),用户必须拥有目标上在服务器级别授予的“CREATE ROUTINE” 和 “ALTER ROUTINE”特权。
- 如果要迁移事件,用户必须拥有源和目标服务器上的“EVENT”特权。
- 如果迁移用户/登录名,则用户必须在目标服务器上拥有“CREATE USER”权限。
- 目标上服务器级别的“DROP”特权,以删除可能已经存在的表。 例如,重试迁移时。
- 目标上服务器级别的“REFERENCES”特权,以创建具有外键的表。
- 如果迁移到 MySQL 8.0,则用户必须在目标服务器上拥有“SESSION_VARIABLES_ADMIN”权限。
- 目标上服务器级别的“CREATE”特权。
- 目标上服务器级别的“INSERT”特权。
- 目标上服务器级别的“UPDATE”特权。
- 目标上服务器级别的“DELETE”特权。
调整目标 Azure Database for MySQL 实例的大小
若要准备目标 Azure Database for MySQL 服务器以便使用 Azure 数据库迁移服务更快地加载数据,建议进行以下服务器参数和配置更改。
max_allowed_packet - 设置为 1073741824(即 1GB),以防止由于长行而引起的连接问题。
slow_query_log - 设置为“关闭”以关闭慢速查询日志。 这将消除数据加载过程中由慢速查询日志记录导致的开销。
query_store_capture_mode - 设置为“无”以关闭查询存储。 这将消除由查询存储的采样活动导致的开销。
innodb_buffer_pool_size - 只能通过纵向扩展 Azure Database for MySQL 服务器的计算来增大 innodb_buffer_pool_size。 在迁移期间从门户的定价层纵向扩展服务器到 64 vCore 常规用途 SKU,以增大 innodb_buffer_pool_size。
innodb_io_capacity 和 innodb_io_capacity_max - 从 Azure 门户中的服务器参数更改为 9000,以提高 IO 利用率,从而优化迁移速度。
innodb_write_io_threads 和 innodb_write_io_threads - 从 Azure 门户中的服务器参数更改为 4 以加快迁移速度。
纵向扩展存储层 - 随着存储层的增加,Azure Database for MySQL 服务器的 IOP 会逐渐增加。
- 在单服务器部署选项中,为了更快地加载,建议增加存储层以增加预配的 IOP。
- 在灵活服务器部署选项中,建议可以缩放(增加或减少)IOPS,而不考虑存储大小。
- 存储大小只能增加,不能减少。
按照下表中的详细信息根据源单服务器的定价层和 VCore 数为目标灵活服务器选择计算大小和计算层。
单一服务器定价层 单一服务器 VCore 数 灵活服务器计算大小 灵活服务器计算层 基本 1 1 常规用途 Standard_D16ds_v4 基本 1 2 常规用途 Standard_D16ds_v4 常规用途 1 4 常规用途 Standard_D16ds_v4 常规用途 1 8 常规用途 Standard_D16ds_v4 常规用途 16 常规用途 Standard_D16ds_v4 常规用途 32 常规用途 Standard_D32ds_v4 常规用途 64 常规用途 Standard_D64ds_v4 内存优化 4 业务关键 Standard_E4ds_v4 内存优化 8 业务关键 Standard_E8ds_v4 内存优化 16 业务关键 Standard_E16ds_v4 内存优化 32 业务关键 Standard_E32ds_v4 1 对于迁移,请为目标灵活服务器选择“常规用途 16 VCore 计算”以加快迁移速度。 迁移完成后,按照本文稍后的“执行迁移后活动”部分所述的计算大小建议,缩减到目标服务器的所需计算大小。
迁移完成后,可以将服务器参数和配置还原为工作负载所需的值。
设置 DMS
部署并配置目标灵活服务器后,接下来需要设置 DMS 以将单一服务器迁移到灵活服务器。
注册资源提供程序
若要注册 Microsoft.DataMigration 资源提供程序,请执行以下步骤。
在创建第一个 DMS 实例之前,请登录到 Azure 门户,然后搜索并选择“订阅”。
选择用于创建 DMS 实例的订阅,然后选择“资源提供程序”。
搜索“Migration”一词,然后选择与“Microsoft.DataMigration”对应的“注册”。
创建数据库迁移服务实例
在 Azure 门户中,选择 + 创建资源,搜索 Azure 数据库迁移服务,然后从下拉列表选择 Azure 数据库迁移服务。
在“Azure 数据库迁移服务”屏幕上,选择“创建” 。
在“创建迁移服务”屏幕上,为服务、订阅以及新的或现有资源组指定名称。
选择定价层并移动到“网络”屏幕。 脱机迁移功能仅在高级定价层上可用。
有关成本和定价层的详细信息,请参阅价格页。
从列表中选择一个现有的虚拟网络,或提供要创建的新虚拟网络的名称。 转到“查看 + 创建”屏幕。 可选择使用“标记”屏幕向服务添加标记。
虚拟网络为 Azure 数据库迁移服务提供了对源 SQL Server 和目标 Azure SQL 数据库实例的访问权限。
有关如何在 Azure 门户中创建虚拟网络的详细信息,请参阅使用 Azure 门户创建虚拟网络一文。
查看配置,然后选择“创建”以创建服务。
创建迁移项目
创建服务后,在 Azure 门户中找到并打开它,然后创建一个新的迁移项目。
在 Azure 门户中,选择“所有服务”,搜索 Azure 数据库迁移服务,然后选择“Azure 数据库迁移服务”。
从搜索结果中选择你的迁移服务实例,然后选择“+ 新建迁移项目”。
在“新建迁移项目”屏幕上指定项目名称,在“源服务器类型”选择框中选择“MySQL”,在“目标服务器类型”选择框中选择“Azure Database For MySQL”,然后在“迁移活动类型”选择框中选择“数据迁移” 。 选择“创建并运行活动”。
也可以现在就选择“仅创建项目”来创建迁移项目,在以后再执行迁移。
配置迁移项目
在“选择源”屏幕上,指定源 MySQL 实例的连接详细信息,然后选择“下一步: 选择目标>>”
在“选择目标”屏幕上,指定目标 zure Database for MySQL 实例的连接详细信息,然后选择“下一步: 选择数据库>>”
在“选择数据库”屏幕上,映射源数据库和目标数据库以进行迁移,然后选择“下一步: 配置迁移设置>>”。 可选择“使源服务器只读”选项,使源变为只读,但要注意,这是一项服务器级别设置。 如果选择了此选项,它会将整个服务器设置为只读,而不只是选定的数据库。
如果目标数据库包含的数据库名称与源数据库的相同,则 Azure 数据库迁移服务默认会选择目标数据库。
在“配置迁移设置”屏幕上,选择要作为迁移的一部分的表,然后选择“下一步: 摘要>>”。 如果目标表有任何数据,则默认不会选择这些表,但你可以显式选择它们,它们会在开始迁移之前被截断。
在“摘要”屏幕上的“活动名称”文本框中,指定迁移活动的名称,然后查看摘要,确保源和目标详细信息与此前指定的信息相符 。
选择“开始迁移”。 迁移活动窗口随即出现,活动的“状态”为“正在初始化” 。 表迁移开始时,“状态”将更改为“正在运行” 。
监视迁移
完成迁移
迁移后活动
脱机迁移中的直接转换迁移是一个依赖于应用程序的过程,虽然本文档不会进行相关介绍,但规定了以下迁移后活动:
- 按照应用程序要求创建登录名、角色和权限。
- 在迁移前的步骤中,根据提取的内容,在目标数据库上重新创建所有触发器。
- 针对目标数据库执行应用程序的性能测试,以验证迁移。
清理资源
如果不打算继续使用数据库迁移服务,则可以使用以下步骤删除该服务:
在 Azure 门户中,选择“所有服务”,搜索 Azure 数据库迁移服务,然后选择“Azure 数据库迁移服务”。
从搜索结果中选择你的迁移服务实例,然后选择“删除服务”。
在确认对话框中,在“输入数据库迁移服务名称”文本框中输入服务的名称,然后选择“删除”。