你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:通过 Azure 门户使用 DMS 将 Azure Database for MySQL 单一服务器联机迁移到灵活服务器

注意

本文包含对术语“从属”的引用,这是 Microsoft 不再使用的术语。 在从软件中删除该术语后,我们会将其从本文中删除。

可以使用 Azure 数据库迁移服务 (DMS) 将 Azure Database for MySQL 单一服务器实例迁移到 Azure Database for MySQL 灵活服务器。DMS 是一个完全托管的服务,旨在实现从多个数据库源到 Azure 数据平台的无缝迁移。 在本教程中,我们将使用 DMS 迁移活动将示例数据库从 Azure Database for MySQL 单一服务器联机迁移到 MySQL 灵活服务器(两者均运行版本 5.7)。

注意

DMS 联机迁移现已正式发布。 DMS 支持迁移到 MySQL 版本 5.7 和 8.0,它还支持从较低版本的 MySQL 服务器(v5.6 和更高版本)迁移到更高版本的服务器。 此外,DMS 支持跨区域、跨资源组和跨订阅迁移,因此可以为目标服务器选择不同于为源服务器指定的区域、资源组和订阅。

本教程介绍如何执行下列操作:

  • 实施有关创建灵活服务器的最佳做法,以使用 DMS 更快地加载数据。
  • 创建和配置目标灵活服务器。
  • 创建 DMS 实例。
  • 在 DMS 中创建 MySQL 迁移项目。
  • 使用 DMS 迁移 MySQL 架构。
  • 运行迁移。
  • 监视迁移。
  • 执行迁移后步骤。
  • 实施有关执行迁移的最佳做法。

先决条件

要完成本教程,需要:

  • 创建或使用 Azure Database for MySQL 单一服务器(源服务器)的现有实例。

  • 为了成功完成联机迁移,请确保满足以下先决条件:

    • 使用所选的 MySQL 命令行工具,通过运行以下命令来验证是否已在源服务器上启用 log_bin:SHOW VARIABLES LIKE 'log_bin'。 如果未启用 log_bin,请为单一服务器实例创建只读副本,然后将其删除。 此操作会将参数 log_bin 设置为 ON,然后你就可以触发迁移操作。
    • 确保用户在源服务器上具有“REPLICATION CLIENT”和“REPLICATION SLAVE”权限,以便能够读取和应用 bin 日志。
    • 如果你的目标是联机迁移,请在源服务器上配置 binlog_expire_logs_seconds 参数,确保在副本提交更改之前不会清除 binlog 文件。 我们建议至少经过两天后再开始。 直接转换成功后,可以重置值。
  • 若要成功完成架构迁移,执行迁移的用户需要在源服务器上拥有以下特权:

    • 源上服务器级别的“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”特权。

限制

在准备迁移时,请务必考虑以下限制。

  • 迁移非表对象时,DMS 不支持重命名数据库。

  • 迁移到启用了 bin_log 的目标服务器时,请务必启用 log_bin_trust_function_creators 以允许创建例程和触发器。

  • 目前,DMS 不支持迁移对象的 DEFINER 子句。 源上具有定义器的所有对象类型都会被删除;迁移后,支持定义器子句且在架构迁移期间创建的所有对象的默认定义器将设置为用于运行迁移的登录名。

  • 目前,DMS 仅支持在移动数据的过程中迁移架构。 如果未为数据移动选择任何内容,则不会发生架构迁移。 选择一个表进行架构迁移也会选择该表进行数据移动。

  • 联机迁移支持仅限于 ROW binlog 格式。

  • 联机迁移现在支持迁移到 v8.0 或 v5.7 Azure Database for MySQL 灵活服务器目标服务器时进行 DDL 语句复制。

    • 配置 Azure DMS 迁移活动时,为架构迁移选择的数据库、表和架构对象(视图、例程、触发器)支持语句复制。 不会复制未选择的数据库、表和架构对象的数据定义和管理语句。 选择要迁移的整个服务器将复制在初始加载完成后在源服务器上创建的任何表、数据库和架构对象的语句。
    • Azure DMS 语句复制支持此处列出的所有数据定义语句,但以下命令除外:
      • LOGFILE GROUP 语句
      • SERVER 语句
      • SPATIAL REFERENCE SYSTEM 语句
      • TABLESPACE 语句
    • Azure DMS 语句复制支持此处列出的所有数据管理–帐户管理语句,但以下命令除外:
      • SET DEFAULT ROLE
      • SET PASSWORD
    • Azure DMS 语句复制支持此处列出的所有数据管理–表维护语句,但以下命令除外:
      • REPAIR TABLE
      • ANALYZE TABLE
      • CHECKSUM TABLE

有关创建灵活服务器以使用 DMS 更快地加载数据的最佳做法

DMS 支持跨区域、跨资源组和跨订阅迁移,因此你可以自由选择适合目标灵活服务器的区域、资源组和订阅。 在创建目标灵活服务器之前,请考虑参考以下配置指导来帮助确保使用 DMS 更快地加载数据。

  • 按照下表中的详细信息根据源单服务器的定价层和 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 计算”以加快迁移速度。 迁移完成后,按照本文稍后的“执行迁移后活动”部分所述的计算大小建议,缩减到目标服务器的所需计算大小。

  • 目标灵活服务器的 MySQL 版本必须高于或等于源单一服务器的版本。

  • 除非需要在特定区域中部署目标灵活服务器,否则将“可用性区域”参数的值设置为“无首选项”。

  • 对于网络连接,如果为源单一服务器配置了专用终结点或专用链接,请在“网络”选项卡上选择“专用访问”;否则请选择“公共访问”。

  • 将源单一服务器中的所有防火墙规则复制到目标灵活服务器。

  • 在创建过程中将单一服务器中的所有名称/值标记复制到灵活服务器。

创建和配置目标灵活服务器

在记住这些最佳做法的前提下创建目标灵活服务器,然后对其进行配置。

  • 创建目标灵活服务器。 有关指导步骤,请参阅快速入门快速入门:使用 Azure 门户创建 Azure Database for MySQL 的实例

  • 配置新的目标灵活服务器,如下所示:

    • 执行迁移的用户需要具有以下权限:
      • 确保用户在目标服务器上拥有“REPLICATION_APPLIER”或“BINLOG_ADMIN”权限,以便能够应用 binlog。
      • 确保用户在目标服务器上拥有“REPLICATION SLAVE”权限。
      • 确保用户在源服务器上拥有“REPLICATION CLIENT”和“REPLICATION SLAVE”权限,以便能够读取和应用 binlog。
      • 若要在目标上创建表,用户必须拥有“CREATE”特权。
      • 如果要迁移使用“DATA DIRECTORY”或“INDEX DIRECTORY”分区选项的表,用户必须拥有“FILE”特权。
      • 如果要迁移到使用“UNION”选项的表,用户必须对映射到 MERGE 表的表拥有“SELECT”、“UPDATE”和“DELETE”特权。
      • 如果要迁移视图,必须拥有“CREATE VIEW”特权。 请记住,根据视图的内容,可能需要某些特权。 有关详细信息,请参阅有关“CREATE VIEW 语句”的特定于所用版本的 MySQL 文档。
      • 如果要迁移事件,用户必须拥有“EVENT”特权。
      • 如果要迁移触发器,用户必须拥有“TRIGGER”特权。
      • 如果要迁移例程,用户必须拥有“CREATE ROUTINE”特权。
    • 按如下所示在目标灵活服务器上配置服务器参数:
      • 设置 TLS 版本和 require_secure_transport 服务器参数以匹配源服务器上的值。
      • 将 sql_mode 服务器参数设置为与源服务器上的值匹配。
      • 在目标服务器上配置服务器参数以匹配源服务器上使用的任何非默认值。
      • 为确保在使用 DMS 时更快地加载数据,请按照说明配置以下服务器参数。
        • max_allowed_packet - 设置为 1073741824(即 1 GB),以防止由于行太大而出现任何连接问题。
        • slow_query_log – 设置为“关闭”以关闭慢速查询日志。 这将消除数据加载过程中由慢速查询日志记录导致的开销。
        • 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 以加快迁移速度。
    • 在目标服务器上配置副本以匹配源服务器上的副本。
    • 将以下服务器管理功能从源单一服务器复制到目标灵活服务器:
      • 角色分配、角色、拒绝分配、经典管理员、访问控制 (IAM)
      • 锁(只读和删除)
      • 警报
      • 任务
      • 资源运行状况警报

设置 DMS

部署并配置目标灵活服务器后,接下来需要设置 DMS 以将单一服务器迁移到灵活服务器。

注册资源提供程序

若要注册 Microsoft.DataMigration 资源提供程序,请执行以下步骤。

  1. 在创建第一个 DMS 实例之前,请登录到 Azure 门户,然后搜索并选择“订阅”。

    在 Azure 市场中选择订阅的屏幕截图。

  2. 选择用于创建 DMS 实例的订阅,然后选择“资源提供程序”。

    选择“资源提供程序”的屏幕截图。

  3. 搜索“Migration”一词,然后选择与“Microsoft.DataMigration”对应的“注册”。

    注册资源提供程序的屏幕截图。

创建数据库迁移服务 (DMS) 实例

  1. 在 Azure 门户中选择“+ 创建资源”,搜索“Azure 数据库迁移服务”一词,然后从下拉列表中选择“Azure 数据库迁移服务”

    搜索“Azure 数据库迁移服务”的屏幕截图。

  2. 在“Azure 数据库迁移服务”屏幕上,选择“创建” 。

    创建 Azure 数据库迁移服务实例的屏幕截图。

  3. 在“选择迁移方案和数据库迁移服务”页上的“迁移方案”下,选择“Azure Database for MySQL 灵活服务器”作为源服务器类型,选择“Azure Database for MySQL”作为目标服务器类型,然后选择“选择”。

    选择“迁移方案”的屏幕截图。

  4. 在“创建迁移服务”页上的“基本信息”选项卡中,在“项目详细信息”下选择适当的订阅,然后选择现有的资源组或创建一个新资源组。

  5. 在“实例详细信息”下指定服务名称,选择一个区域,然后确认已选择“Azure”作为服务模式。

  6. 在“定价层”的右侧,选择“配置层”。

    选择“配置层”的屏幕截图。

  7. 在“配置”页上,为 DMS 实例选择包含 4 个 vCore 的“高级”定价层,然后选择“应用”。

    DMS 高级 4-vCore 在 6 个月(183 天,从 DMS 服务创建日期算起,到产生费用之日为止)内免费。 有关 DMS 成本和定价层的详细信息,请参阅定价页

    选择定价层的屏幕截图。

    接下来,需要指定要为 DMS 实例提供的、能够访问源单一服务器和目标灵活服务器的 VNet。

  8. 在“创建迁移服务”页上,选择“下一步: 网络 >>”。

  9. 在“网络”选项卡上,从列表中选择现有 VNet,或提供要创建的新 VNet 的名称,然后选择“查看 + 创建”。

    有关详细信息,请参阅使用 Azure 门户创建虚拟网络一文。

    选择“网络”的屏幕截图。

    [!IMPORTANT]
    必须将 VNet 配置为能够访问源单一服务器和目标灵活服务器,因此请务必执行以下操作:

    • 为源和目标 Azure Database for MySQL 服务器创建服务器级防火墙规则或配置 VNET 服务终结点,以允许 Azure 数据库迁移服务的 VNet 访问源和目标数据库。

    • 确保 VNet 网络安全组 (NSG) 规则不会阻止服务总线、存储和 Azure Monitor 的服务标记的出站端口 443。 有关 VNet NSG 流量筛选的更多信息,请参阅使用网络安全组筛选网络流量

    注意

    若要向服务添加标记,请选择“下一步: 标记”,进入“标记”选项卡。 向服务添加标记是可选操作。

  10. 导航到“查看 + 创建”选项卡,查看配置和条款,然后选择“创建”。

    选择“查看 + 创建”的屏幕截图。

    现在,开始部署 DMS 实例。 “部署正在进行”消息会显示几分钟,然后变为“部署已完成”。

  11. 选择“转到资源”。

    选择“转到资源”的屏幕截图。

  12. 从资源概述页中标识 DMS 实例的 IP 地址,并为源单一服务器和目标灵活服务器创建防火墙规则,列出 DMS 实例的 IP 地址。

创建迁移项目

若要创建迁移项目,请执行以下步骤。

  1. 在 Azure 门户中,选择“所有服务”,搜索 Azure 数据库迁移服务,然后选择“Azure 数据库迁移服务”。

    查找 Azure 数据库迁移服务的所有实例的屏幕截图。

  2. 在搜索结果中选择创建的 DMS 实例,然后选择“+ 新建迁移项目”。

    选择“新建迁移项目”的屏幕截图。

  3. 在“新建迁移项目”页上指定项目名称,在“源服务器类型”选择框中选择“Azure Database For MySQL 单一服务器”,在“目标服务器类型”选择框中选择“Azure Database For MySQL 灵活服务器”,在“迁移活动类型”选择框中选择“联机数据迁移”,然后选择“创建并运行活动”。

    注意

    如果仅选择“创建项目”作为迁移活动类型,则只会创建迁移项目;可在以后运行该迁移项目。

    创建新迁移项目的屏幕截图。

配置迁移项目

若要配置 DMS 迁移项目,请执行以下步骤。

  1. 在“选择源”屏幕上,根据订阅、位置和资源组查找服务器。 会自动填充用户名,然后提供源服务器的密码。

    添加源详细信息屏幕的屏幕截图。

  2. 选择“下一步: 选择目标>>”,然后在“选择目标”屏幕上,根据订阅、位置和资源组查找服务器。 会自动填充用户名,然后提供目标灵活服务器的密码。

    “选择目标”的屏幕截图。

  3. 选择“下一步: 选择数据库>>”,然后在“选择数据库”选项卡上的“服务器迁移选项”下,选择“迁移所有适用的数据库”,或者在“选择数据库”下选择要迁移的服务器对象。

    注意

    现在有一个“迁移所有适用的数据库”选项,选中后,此选项将迁移用户创建的所有数据库和表。 由于 Azure Database for MySQL 灵活服务器不支持混合大小写数据库,不会对源上的混合大小写数据库进行联机迁移。

    “选择数据库”的屏幕截图。

  4. 在“选择数据库”部分的“源数据库”下,选择要迁移的数据库。

    将迁移指定的数据库中的非表对象,并跳过未选择的项。 只能选择名称与源服务器和目标服务器上的名称匹配的源数据库和目标数据库。

    如果在源服务器上选择目标服务器上不存在的数据库,则会在目标服务器上创建该数据库。

  5. 选择“下一步: 选择表>>”来导航到“选择表”选项卡。

    在填充该选项卡之前,DMS 会从源和目标上的选定数据库中提取表,然后确定表是否存在并包含数据。

  6. 选择要迁移的表。

    如果目标服务器上不存在所选源表,联机迁移过程会确保将表架构和数据迁移到目标服务器。

    “选择表”的屏幕截图。

    DMS 将验证你的输入,如果通过了验证,你可以开始迁移。

  7. 针对架构迁移进行配置后,请选择“查看并开始迁移”。

    注意

    只有在尝试对失败的迁移进行故障排除时,才需要导航到“配置迁移设置”选项卡。

  8. 在“摘要”选项卡上的“活动名称”文本框中指定迁移活动的名称,然后查看摘要,确保源和目标详细信息与前面指定的信息匹配。

    选择“摘要”的屏幕截图。

  9. 选择“开始迁移”。

    迁移活动窗口随即出现,活动的“状态”为“正在初始化” 。 表迁移开始时,“状态”将更改为“正在运行” 。

    “正在运行”状态的屏幕截图。

监视迁移

  1. 完成“初始加载”活动后,请导航到“初始加载”选项卡以查看完成状态和已完成的表数。

    屏幕截图显示已完成的初始加载迁移。

    完成“初始加载”活动后,系统会将你自动导航到“复制数据更改”选项卡。 可以监视迁移进度,因为屏幕每 30 秒自动刷新一次。

  2. 选择“刷新”以更新显示内容,并根据需要查看落后于源的秒数。

    监视迁移的屏幕截图。

  3. 监视“落后于源的秒数”,当它接近 0 时,请导航到迁移活动屏幕顶部的“开始切换”菜单选项卡,开始进行直接转换。

  4. 在准备好执行直接转换之前,请按照直接转换窗口中的步骤操作。

  5. 完成所有步骤后,选择“确认”,然后选择“应用”。

    执行切换的屏幕截图。

执行迁移后活动

迁移完成后,请务必完成以下迁移后活动。

  • 针对目标数据库执行应用程序的性能测试,以验证迁移。

  • 更新连接字符串以指向新的灵活服务器。

  • 确保应用程序持续正常运行后,删除源单一服务器。

  • 如果纵向扩展了目标灵活服务器以加快迁移速度,请按照下表中的详细信息根据源单一服务器定价层和 VCore 数,通过选择灵活服务器的计算大小和计算层来相应缩减该服务器。

    单一服务器定价层 单一服务器 VCore 数 灵活服务器计算大小 灵活服务器计算层
    基本 1 可突发 Standard_B1s
    基本 2 可突发 Standard_B2s
    常规用途 4 常规用途 Standard_D4ds_v4
    常规用途 8 常规用途 Standard_D8ds_v4
    • 若要清理 DMS 资源,请执行以下步骤:

      1. 在 Azure 门户中,选择“所有服务”,搜索 Azure 数据库迁移服务,然后选择“Azure 数据库迁移服务”。

      2. 从搜索结果中选择你的迁移服务实例,然后选择“删除服务”。

      3. 在确认对话框中的“键入数据库迁移服务名称”文本框内指定实例名称,然后选择“删除”。

迁移最佳做法

执行迁移时,请务必考虑以下最佳做法。

  • 在发现和评估过程中,利用一些关键数据来帮助迁移,包括服务器 SKU、CPU 使用率、存储大小、数据库大小和扩展用法等。

  • 在为生产迁移之前执行测试迁移:

    • 测试迁移是重要的操作,可确保涵盖数据库迁移的各个方面,包括应用程序测试。 最佳做法是在开始时完全出于测试目的来运行迁移。 在新启动的迁移以最小延迟进入“复制数据更改”阶段后,将灵活服务器目标设为正在运行的测试工作负载。 使用该目标测试应用程序,以确保获得预期的性能和结果。 如果要迁移到更高的 MySQL 版本,请测试应用程序兼容性。
    • 测试完成后,可以迁移生产数据库。 此时需要确定生产迁移的日期和时间。 理想情况下,此时的应用程序使用率较低。 涉及的所有利益干系人都应随时有时间参与并准备就绪。 需要对生产迁移进行密切监视。 对于联机迁移,复制必须在执行切换之前完成,以防止数据丢失。
  • 重定向所有依赖应用程序来访问新的主数据库,并将源服务器设为只读。 然后,打开应用程序供生产使用。

  • 应用程序在目标灵活服务器上开始运行后,请密切监视数据库性能,以确认是否需要进行性能优化。