可以使用 Azure 数据库迁移服务 (DMS) 将本地或其他云服务 MySQL 服务器迁移到 Azure Database for MySQL 灵活服务器。DMS 是一个完全托管的服务,旨在实现从多个数据库源到 Azure 数据平台的无缝迁移。 在本教程中,我们将使用 DMS 迁移活动将示例数据库从本地 MySQL 服务器联机迁移到 Azure Database for MySQL 灵活服务器(两个服务器均运行版本 5.7)。
Note
DMS 联机迁移现已正式发布。 DMS 支持迁移到 MySQL 版本 5.7 和 8.0,还支持从较低版本的 MySQL 服务器(v5.6 及更高版本)迁移到更高版本服务器。 此外,DMS 支持跨区域、跨资源组和跨订阅迁移,因此您可以为目标服务器选择与源服务器指定内容不同的区域、资源组和订阅。
本教程中,您将学习如何:
- 实施有关创建灵活服务器的最佳做法,以使用 DMS 更快地加载数据。
- 创建和配置目标灵活服务器。
- 创建 DMS 实例。
- 在 DMS 中创建 MySQL 迁移项目。
- 使用 DMS 迁移 MySQL 架构。
- 运行迁移。
- 监视迁移。
- 执行迁移后步骤。
- 实施有关执行迁移的最佳做法。
Prerequisites
要完成本教程,需要:
创建或使用已有 MySQL 实例(源服务器)。
若要成功完成联机迁移,请确保满足以下先决条件:
使用所选的 MySQL 命令行工具通过运行以下命令来验证是否已
log_bin在源服务器上启用:SHOW VARIABLES LIKE 'log_bin'如果log_bin未启用,请确保在开始迁移之前启用它。确保用户在源服务器上具有读取和应用二进制日志的
REPLICATION CLIENT和REPLICATION REPLICA权限。如果要进行联机迁移,则需要在源服务器上配置 binlog 过期时间,以确保副本提交更改之前不会清除 binlog 文件。 我们建议至少经过两天后再开始。 参数取决于 MySQL 服务器的版本。 对于 MySQL 5.7,参数
expire_logs_days默认设置为 0,这不会自动清除。 对于 MySQL 8.0,它binlog_expire_logs_seconds默认设置为 30 天。 直接转换成功后,可以重置值。
若要成功完成架构迁移,请在源服务器上执行迁移的用户需要以下特权:
源服务器级别的SELECT权限。
如果迁移视图,用户必须在源服务器上具有 SHOW VIEW 权限,并且目标服务器上的 CREATE VIEW 权限。
如果迁移触发器,用户必须在源和目标服务器上具有 TRIGGER 权限。
如果迁移例程(过程和/或函数),用户必须在目标上的服务器级别获得 CREATE ROUTINE 和 ALTER ROUTINE 权限。
如果迁移事件,用户必须在源和目标服务器上具有 EVENT 权限。
如果迁移用户/登录名,则用户必须在目标服务器上拥有 CREATE USER 权限。
在目标上具有服务器级别的删除权限,以便删除可能已经存在的表格。 例如,重试迁移时。
在目标的服务器级别上拥有REFERENCES 特权,以便创建包含外键的表。
如果迁移到 MySQL 8.0,则用户必须在目标服务器上拥有 SESSION_VARIABLES_ADMIN 权限。
在目标服务器上具有服务器级别的 CREATE 权限。
目标上的服务器级别的 INSERT 特权。
目标上的服务器级别的 UPDATE 特权。
目标上的服务器级别的 DELETE 特权。
Limitations
在准备迁移时,请务必考虑以下限制。
迁移非表对象时,DMS 不支持重命名数据库。
迁移到启用了的目标服务器
bin_log时,请务必启用log_bin_trust_function_creators以允许创建例程和触发器。目前,DMS 不支持迁移对象的 DEFINER 子句。 源中具有定义器的所有对象类型都会在目标上删除。 迁移后,支持定义器子句的所有对象的默认定义符(在架构迁移期间创建)都设置为用于运行迁移的登录名。
目前,DMS 仅支持在移动数据的过程中迁移架构。 如果未为数据移动选择任何内容,则不会发生架构迁移。 选择一个表进行架构迁移也会选择该表进行数据移动。
联机迁移支持仅限于 ROW binlog 格式。
Azure Database for MySQL 灵活服务器不支持混合大小写数据库。 源上的混合大小写数据库未包含在联机迁移中。
联机迁移现在支持迁移到 v8.0 或 v5.7 Azure Database for MySQL 灵活服务器目标服务器时进行 DDL 语句复制。
配置 Azure DMS 迁移活动时,为架构迁移选择的数据库、表和架构对象(视图、例程、触发器)支持语句复制。 不会复制未选择的数据库、表和架构对象的数据定义和管理语句。 为迁移选择整个服务器会复制在初始加载完成之后在源服务器上创建的任何表、数据库和架构对象的语句。
Azure DMS 语句复制支持除以下命令外的所有 数据定义语句:
- LOGFILE GROUP 语句
- SERVER 语句
- SPATIAL REFERENCE SYSTEM 语句
- TABLESPACE 语句
Azure DMS 语句复制支持所有 数据管理 – 帐户管理语句,但以下命令除外:
- 设置默认角色
- 设置密码
Azure DMS 语句复制支持所有 数据管理 – 表维护语句,但以下命令除外:
- 修复表
- 对表进行分析
- 校验和表
Azure DMS 语句或 binlog 复制不支持以下语法:
CREATE TABLE 'b' as SELECT * FROM 'a';此 DDL 的复制会导致以下错误:“在 CREATE TABLE 和 START TRANSACTION 语句后仅允许 BINLOG INSERT、COMMIT 和 ROLLBACK 语句。
迁移持续时间可能会受到后端计算维护的影响,这可能会重置进度。
有关创建灵活服务器以使用 DMS 更快地加载数据的最佳做法
DMS 支持跨区域、跨资源组和跨订阅迁移,因此你可以为目标灵活服务器选择适当的区域、资源组和订阅。 在创建目标灵活服务器之前,请考虑参考以下配置指导来帮助确保使用 DMS 更快地加载数据。
根据源 MySQL 服务器配置,为目标灵活服务器选择计算大小和计算层。
1 对于迁移,最佳做法是选择“常规用途 16 vCore”计算或更高版本,以便目标灵活服务器更快地进行迁移。 在迁移完成后,请将目标服务器的计算资源调整到所需的大小。
目标灵活服务器的 MySQL 版本必须大于或等于源 MySQL 服务器的版本。
除非需要在特定区域中部署目标灵活服务器,否则请将可用性区域参数的值设置为 “无首选项”。
对于网络连接,在“网络”选项卡上,选择“专用访问”;否则,选择“公共访问”配置防火墙规则以允许访问目标灵活服务器。
创建和配置目标灵活服务器
在记住这些最佳做法的前提下创建目标灵活服务器,然后对其进行配置。
创建目标灵活服务器。 有关指导步骤,请参阅快速入门快速入门:使用 Azure 门户创建 Azure Database for MySQL 的实例。
配置新的目标灵活服务器,如下所示:
执行迁移的用户需要拥有以下权限:
确保用户在目标服务器上具有
REPLICATION_APPLIERBINLOG_ADMIN应用 bin 日志的权限。确保用户对目标服务器具有
REPLICATION REPLICA权限。确保用户对源服务器具有
REPLICATION CLIENT和REPLICATION REPLICA权限,以读取和应用 bin 日志。若要在目标上创建表,用户必须具有
CREATE该权限。如果迁移具有
DATA DIRECTORY或INDEX DIRECTORY分区选项的表,用户必须具有FILE该权限。如果迁移到具有
UNION选项的表,用户必须拥有SELECT、UPDATE和DELETE特权,以便将表映射到MERGE表。如果迁移视图,则必须拥有
CREATE VIEW权限。
请记住,根据视图的内容,可能需要某些特权。 有关详细信息,请参阅与您使用版本相关的 MySQL 文档
CREATE VIEW STATEMENT。- 如果迁移事件,用户必须具有该权限
EVENT。 - 如果迁移触发器,用户必须具有
TRIGGER权限。 - 如果要迁移例程,用户必须具有
CREATE ROUTINE权限。
按如下所述在目标灵活服务器上配置服务器参数:
设置 TLS 版本和 require_secure_transport 服务器参数以匹配源服务器上的值。
将 sql_mode 服务器参数设置为与源服务器上的值匹配。
在目标服务器上配置服务器参数以匹配源服务器上使用的任何非默认值。
为确保在使用 DMS 时更快地加载数据,请按照说明配置以下服务器参数。
max_allowed_packet– 设置为1073741824(即 1 GB),以防止由于大型行而导致的任何连接问题。slow_query_log– 设置为OFF关闭慢查询日志。 这消除了在数据加载期间查询日志记录速度缓慢导致的开销。innodb_buffer_pool_size– 只能通过提升 Azure Database for MySQL 服务器的计算能力来增加。 在迁移期间,从门户的定价层将服务器纵向扩展到 64 个 vCore 常规用途 SKU,以增加innodb_buffer_pool_size。innodb_io_capacity和innodb_io_capacity_max- 从 Azure 门户中的服务器参数更改为 9000,以提高 IO 利用率以优化迁移速度。innodb_write_io_threads- 从 Azure 门户中的服务器参数更改为 4,以提高迁移速度。
配置目标服务器上的副本以匹配源服务器上的副本。
设置 DMS
部署并配置目标灵活服务器后,接下来需要设置 DMS,将源 MySQL 服务器迁移到灵活服务器。
注册资源提供程序
若要注册 Microsoft.DataMigration 资源提供程序,请执行以下步骤。
在创建第一个 DMS 实例之前,请登录到 Azure 门户,然后搜索并选择“订阅”。
选择用于创建 DMS 实例的订阅,然后选择“资源提供程序”。
搜索“Migration”一词,然后选择与“Microsoft.DataMigration”对应的“注册”。
创建数据库迁移服务 (DMS) 实例
在 Azure 门户中选择“+ 创建资源”,搜索“Azure 数据库迁移服务”一词,然后从下拉列表中选择“Azure 数据库迁移服务”。
在“Azure 数据库迁移服务”屏幕上,选择“创建” 。
在“选择迁移方案和数据库迁移服务”页上的“迁移方案”下,选择“MySQL”作为源服务器类型,选择“Azure Database for MySQL”作为目标服务器类型,然后选择“选择”。
在“创建迁移服务”页上的“基本信息”选项卡中,在“项目详细信息”下选择适当的订阅,然后选择现有的资源组或创建一个新资源组。
在“实例详细信息”下指定服务名称,选择一个区域,然后确认已选择“Azure”作为服务模式。
在“定价层”的右侧,选择“配置层”。
在“配置”页上,为 DMS 实例选择包含 4 个 vCore 的“高级”定价层,然后选择“应用”。
DMS Premium 4-vCore 在产生任何费用之前,从 DMS 服务创建日期起 6 个月(183 天)是免费的。 有关 DMS 成本和定价层的详细信息,请参阅定价页。
接下来,我们需要指定为 DMS 实例提供对目标灵活服务器的访问权限的虚拟网络。
在“ 创建迁移服务 ”页上,选择“ 下一步:网络 >>”。
在“ 网络 ”选项卡上,从列表中选择现有虚拟网络或提供要创建的新虚拟网络的名称,然后选择“ 查看 + 创建”。
有关详细信息,请参阅使用 Azure 门户创建虚拟网络一文。
虚拟网络必须配置为同时访问源 MySQL 服务器和目标灵活服务器,因此请务必:
- 为源 MySQL 服务器和目标 Azure Database for MySQL 服务器创建服务器级防火墙规则或配置网络,以允许 Azure 数据库迁移服务的虚拟网络访问源数据库和目标数据库。
- 确保您的虚拟网络安全组(NSG)规则不会阻止与 ServiceBus、存储和 Azure 监控关联的 ServiceTag 的出口端口 443。 有关虚拟网络 NSG 流量筛选的详细信息,请参阅 使用网络安全组筛选网络流量。
Note
若要将标记添加到服务,请通过选择“下一步:标记”转到“标记”选项卡。 向服务添加标记是可选操作。
导航到“查看 + 创建”选项卡,查看配置和条款,然后选择“创建”。
现在,开始部署 DMS 实例。 “部署正在进行”消息会显示几分钟,然后变为“部署已完成”。
选择“转到资源”。
从资源概述页标识 DMS 实例的 IP 地址,并为源 MySQL 服务器和目标灵活服务器创建防火墙规则,以列出 DMS 实例的 IP 地址。
创建迁移项目
若要创建迁移项目,请执行以下步骤。
在 Azure 门户中,选择“所有服务”,搜索 Azure 数据库迁移服务,然后选择“Azure 数据库迁移服务”。
在搜索结果中选择创建的 DMS 实例,然后选择“+ 新建迁移项目”。
在“新建迁移项目”页上指定项目名称,在“源服务器类型”选择框中选择“MySQL”,在“目标服务器类型”选择框中选择“Azure Database For MySQL 灵活服务器”,在“迁移活动类型”选择框中选择“联机数据迁移”,然后选择“创建并运行活动”。
仅选择“创建项目”作为迁移活动类型只会创建迁移项目;然后,可以在以后运行迁移项目。
配置迁移项目
若要配置 DMS 迁移项目,请执行以下步骤。
在 “选择源 ”屏幕上,必须确保 DMS 位于已连接到源服务器的虚拟网络中。 你将在此处输入源服务器名称、服务器端口、用户名和源服务器密码。
选择 “下一步:选择目标 >>”,然后在 “选择目标 ”屏幕上,根据订阅、位置和资源组找到服务器。 会自动填充用户名,然后提供目标灵活服务器的密码。
选择“下一步:选择数据库”,然后在“选择数据库>>”选项卡上的“服务器迁移选项”下,选择“迁移所有适用数据库”或“选择数据库”下选择要迁移的服务器对象。
现在有一个“迁移所有适用的数据库”选项。 选中此选项后,将迁移所有用户创建的数据库和表。 由于 Azure Database for MySQL - 灵活服务器不支持混合大小写数据库,因此源上的混合大小写数据库不会被包括在联机迁移中。
在 “选择数据库” 部分的 “源数据库”下,选择要迁移的数据库。
您指定的数据库中的非表对象将被迁移,而您未选择的项目将被跳过。 只能选择名称与源服务器和目标服务器上的名称匹配的源数据库和目标数据库。
如果在目标服务器上选择不存在的源服务器上的数据库,则会在目标服务器上创建该数据库。
选择 “下一步:选择表 >> ”以导航到 “选择表 ”选项卡。
在填充选项卡之前,DMS 将从源和目标上的所选数据库提取表,然后确定该表是否存在并包含数据。
选择要迁移的表。
如果目标服务器上不存在选定的源表,联机迁移过程可确保表架构和数据迁移到目标服务器。
DMS 会验证输入,如果验证通过,则可以开始迁移。
针对架构迁移进行配置后,请选择“查看并开始迁移”。
只有在尝试对失败的迁移进行故障排除时,才需要导航到“配置迁移设置”选项卡。
在“摘要”选项卡上的“活动名称”文本框中指定迁移活动的名称,然后查看摘要,确保源和目标详细信息与前面指定的信息匹配。
选择“开始迁移”。
迁移活动窗口随即出现,活动的“状态”为“正在初始化” 。 表迁移开始时,“状态”将更改为“正在运行” 。
监视迁移
完成“初始加载”活动后,请导航到“初始加载”选项卡以查看完成状态和已完成的表数。
完成“初始加载”活动后,系统会将你自动导航到“复制数据更改”选项卡。 可以监视迁移进度,因为屏幕每 30 秒自动刷新一次。
选择“刷新”以更新显示内容,并根据需要查看落后于源的秒数。
监视“落后于源的秒数”,当它接近 0 时,请导航到迁移活动屏幕顶部的“开始切换”菜单选项卡,开始进行直接转换。
在准备好执行直接转换之前,请按照直接转换窗口中的步骤操作。
完成所有步骤后,选择“确认”,然后选择“应用”。
执行迁移后活动
迁移完成后,完成以下迁移后活动。
针对目标数据库执行应用程序的性能测试,以验证迁移。
更新连接字符串以指向新的灵活服务器。
如果您为了加快迁移速度而扩大了目标灵活服务器的规模,请根据源 MySQL 服务器的配置为灵活服务器选择计算大小和计算层,然后缩小规模。
若要清理 DMS 资源,请执行以下步骤:
在 Azure 门户中,选择“所有服务”,搜索 Azure 数据库迁移服务,然后选择“Azure 数据库迁移服务”。
从搜索结果中选择你的迁移服务实例,然后选择“删除服务”。
在确认对话框中的“键入数据库迁移服务名称”文本框内指定实例名称,然后选择“删除”。
迁移最佳做法
执行迁移时,请务必考虑以下最佳做法。
在发现和评估过程中,利用一些关键数据来帮助迁移,包括服务器 SKU、CPU 使用率、存储大小、数据库大小和扩展用法等。
在为生产迁移之前执行测试迁移:
测试迁移是重要的操作,可确保涵盖数据库迁移的各个方面,包括应用程序测试。 最佳做法是在开始时完全出于测试目的来运行迁移。 在新启动的迁移以最小延迟进入“复制数据更改”阶段后,将灵活服务器目标设为正在运行的测试工作负载。 使用该目标测试应用程序,以确保获得预期的性能和结果。 如果要迁移到更高的 MySQL 版本,请测试应用程序兼容性。
测试完成后,可以迁移生产数据库。 此时需要确定生产迁移的日期和时间。 理想情况下,此时的应用程序使用率较低。 涉及的所有利益干系人都应随时有时间参与并准备就绪。 需要对生产迁移进行密切监视。 对于联机迁移,复制必须在执行切换之前完成,以防止数据丢失。
重定向所有依赖应用程序来访问新的主数据库,并将源服务器设为只读。 然后,打开应用程序供生产使用。
应用程序在目标灵活服务器上开始运行后,请密切监视数据库性能,以确认是否需要进行性能优化。