可以使用 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 服务器(v5.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 创建服务器级 防火墙规则 或 配置虚拟网络服务终结点 ,以允许 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 权限。
- 在目标上具有服务器级别的删除权限,以便删除可能已经存在的表格。 例如,重试迁移时。
- 在目标的服务器级别上拥有REFERENCES 特权,以便创建包含外键的表。
- 如果迁移到 MySQL 8.0,则用户必须在目标服务器上拥有 SESSION_VARIABLES_ADMIN 权限。
- 在目标服务器上具有服务器级别的 CREATE 权限。
- 目标上的服务器级别的 INSERT 特权。
- 目标上的服务器级别的 UPDATE 特权。
- 目标上的服务器级别的 DELETE 特权。
调整目标 Azure Database for MySQL 实例的大小
若要准备目标 Azure Database for MySQL 服务器以便使用 Azure 数据库迁移服务更快地加载数据,建议进行以下服务器参数和配置更改。
max_allowed_packet- 设置为1073741824(即 1 GB),以防止因大行而导致的任何连接问题。slow_query_log- 设置为OFF关闭慢查询日志。 这消除了在数据加载期间查询日志记录速度缓慢导致的开销。query_store_capture_mode- 将其设置为NONE以关闭查询存储。 这消除了由查询存储采样活动导致的开销。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 随着存储层的增加而逐渐增加。
- 在灵活服务器部署选项中,建议可以缩放(增加或减少)IOPS,而不考虑存储大小。
- 存储大小只能增加,不能减少。
根据源 MySQL 服务器的配置,为目标灵活服务器选择计算大小和计算层。
1 对于迁移,最佳做法是选择“常规用途 16 vCore”计算或更高版本,以便目标灵活服务器更快地进行迁移。 在迁移完成后,请将目标服务器的计算资源调整到所需的大小。
迁移完成后,可以将服务器参数和配置还原为工作负载所需的值。
设置 DMS
部署并配置目标灵活服务器后,接下来需要设置 DMS,将 MySQL 服务器迁移到灵活服务器。
注册资源提供程序
若要注册 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 实例的连接详细信息,然后选择“ 下一步:选择目标” >>
在“选择目标”屏幕上,指定目标 Azure Database for MySQL 实例的连接详细信息,然后选择“下一步:选择数据库>>”
在 “选择数据库” 屏幕上,映射源数据库和目标数据库进行迁移,然后选择“ 下一步:配置迁移设置 >>”。 可选择“使源服务器只读”选项,使源变为只读,但要注意,这是一项服务器级别设置。 如果选择了此选项,它会将整个服务器设置为只读,而不只是选定的数据库。
如果目标数据库包含的数据库名称与源数据库的相同,则 Azure 数据库迁移服务默认会选择目标数据库。
在 “配置迁移设置” 屏幕上,选择要成为迁移的一部分的表,然后选择“ 下一步:摘要 >>”。 如果目标表具有任何数据,则默认情况下不会选择它们,但你可以显式选择它们,并在开始迁移之前将其截断。
在“摘要”屏幕上的“活动名称”文本框中,指定迁移活动的名称,然后查看摘要,确保源和目标详细信息与此前指定的信息相符 。
选择“开始迁移”。 迁移活动窗口随即出现,活动的“状态”为“正在初始化” 。 表迁移开始时,“状态”将更改为“正在运行” 。
监视迁移
完成迁移
迁移后活动
脱机迁移中的迁移转换过渡是一个取决于应用程序的过程,该过程不包括在本文件的范围内,但建议了以下迁移后活动:
- 根据应用程序要求创建登录名、角色和权限。
- 在预迁移步骤中提取的目标数据库上重新创建所有触发器。
- 针对目标数据库执行应用程序的性能测试,以验证迁移。
清理资源
如果不打算继续使用数据库迁移服务,则可以使用以下步骤删除该服务:
在 Azure 门户中,选择“所有服务”,搜索 Azure 数据库迁移服务,然后选择“Azure 数据库迁移服务”。
从搜索结果中选择你的迁移服务实例,然后选择“删除服务”。
在确认对话框中,在“输入数据库迁移服务名称”文本框中输入服务的名称,然后选择“删除”。