Azure Database for MySQL 灵活服务器中的主版本升级

适用于:Azure Database for MySQL - 灵活服务器

注意

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

本文介绍如何就地升级 Azure Database for MySQL 灵活服务器中的 MySQL 主版本。 利用此功能,客户可以将 MySQL 5.7 服务器就地升级到 MySQL 8.0,无需移动任何数据,也无需更改应用程序连接字符串。

重要

  • 目前无法对基于可突发 SKU 的 5.7 版服务器进行主版本升级。
  • 停机持续时间根据数据库实例的大小及其包含的表数而不同。
  • 通过 Rest API 或 SDK 为 Azure Database for MySQL 灵活服务器启动主版本升级时,请避免在同一请求中修改服务的其他属性。 不允许同时进行更改,否则可能导致意外的结果或请求失败。 请在升级完成后,在单独操作中执行属性修改。
  • 升级 MySQL 主版本是不可逆的操作。 如果验证过程确定服务器上配置了任何已删除已弃用的功能,则部署可能会失败。 你可以在服务器上进行所需的配置更改,然后再次尝试升级。

先决条件

  • 应该先升级 MySQL 版本 5.7 中的只读副本,然后再升级主服务器,使不同 MySQL 版本之间的复制保持兼容,请阅读有关 MySQL 版本之间的复制兼容性的详细信息。
  • 在升级生产服务器之前,我们强烈建议使用官方 Oracle MySQL 升级检查器工具测试数据库架构兼容性并执行必要的回归测试,以验证应用程序与新 MySQL 版本中已删除/已弃用的功能的兼容性。
  • 在生产服务器上执行主版本升级之前,触发按需备份,该版本可用于从执行的完整按需备份回滚到版本 5.7

使用 Azure 门户执行从 MySQL 5.7 到 MySQL 8.0 的主版本升级计划

若要使用 Azure 门户执行 Azure Database for MySQL 灵活服务器 5.7 服务器的主版本升级,请执行以下步骤。

  1. Azure 门户中,选择现有的 Azure Database for MySQL 灵活服务器 5.7 服务器。

    重要

    建议首先在还原后的服务器副本上执行升级,而不是直接升级生产服务器。 请参阅如何执行时间点还原

  2. 在“概述”页上的工具栏中,选择“升级”。

    重要

    在升级之前,请访问 MySQL 8.0 中已删除的功能列表的链接。 使用 Azure 门户上的“服务器参数”边栏选项卡验证已弃用的 sql_mode 值,并从当前 Azure Database for MySQL 灵活服务器 5.7 服务器中删除/取消选择这些值,以避免部署失败。 MySQL 8.0 不再支持值为 NO_AUTO_CREATE_USER、NO_FIELD_OPTIONS、NO_KEY_OPTIONS 和 NO_TABLE_OPTIONS 的 sql_mode

    显示 Azure Database for MySQL 灵活服务器升级的屏幕截图。

  3. 在“升级”边栏中的“要升级的 MySQL 版本”文本框中,确认要升级到的 MySQL 主版本,即 8.0。

    显示“升级”的屏幕截图。

    在升级主服务器之前,首先需要升级所有关联的只读副本服务器。 在完成此操作之前,将禁用“升级”。

  4. 在主服务器上,选择确认消息以确认是否已升级所有副本服务器,然后选择“升级”。

    显示升级的屏幕截图。

    在只读副本和独立服务器上,默认已启用“升级”。

使用 Azure CLI 执行从 MySQL 5.7 到 MySQL 8.0 的主版本升级计划

若要使用 Azure CLI 执行 Azure Database for MySQL 灵活服务器 5.7 服务器的主版本升级,请执行以下步骤。

  1. 安装适用于 Windows 的 Azure CLI 以运行升级命令。

    此升级需要 2.40.0 或更高版本的 Azure CLI。 运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。

  2. 登录后,运行 az mysql server upgrade 命令。

    az mysql flexible-server upgrade --name {your mysql server name} --resource-group {your resource group} --subscription {your subscription id} --version 8
    
  3. 在确认提示下,键入“y”以确认或键入“n”以停止升级过程,然后按 Enter。

使用 Azure 门户在只读副本服务器上执行从 MySQL 5.7 到 MySQL 8.0 的主版本升级

若要通过 Azure 门户在只读副本上执行从 Azure Database for MySQL 灵活服务器 5.7 服务器到 MySQL 8.0 的主版本升级,请执行以下步骤。

  1. 在 Azure 门户中,选择现有的 Azure Database for MySQL 灵活服务器 5.7 只读副本服务器。

  2. 在“概述”页上的工具栏中,选择“升级”。

重要

在升级之前,请访问 MySQL 8.0 中已删除的功能列表的链接。 使用 Azure 门户上的“服务器参数”边栏选项卡验证已弃用的 sql_mode 值,并从当前 Azure Database for MySQL 灵活服务器 5.7 服务器中删除/取消选择这些值,以避免部署失败。

  1. 在“升级”部分,选择“升级”以将 Azure Database for MySQL 灵活服务器 5.7 只读副本服务器升级到 MySQL 8.0。

    此时会显示一条通知,确认升级成功。

  2. 在“概述”页上,确认 Azure Database for MySQL 灵活服务器只读副本服务器是否正在运行版本 8.0。

  3. 现在转到你的主服务器,并在其上执行主版本升级。

使用只读副本执行从 MySQL 5.7 到 MySQL 8.0 的停机时间最短的主版本升级

若要使用只读副本服务器执行从 Azure Database for MySQL 灵活服务器 5.7 服务器到 MySQL 8.0 的停机时间最短的主版本升级,请执行以下步骤。

  1. 在 Azure 门户中,选择现有的 Azure Database for MySQL 灵活服务器 5.7 服务器。

  2. 从主服务器创建只读副本

  3. 将只读副本升级到版本 8.0。

  4. 确认副本服务器在运行版本 8.0 运行后,断开应用程序与主服务器之间的连接。

  5. 检查复制状态,确保副本服务器与主服务器完全同步,从而让所有数据都处于同步状态,并确保主服务器中没有执行任何新的操作。

  6. 在副本服务器上使用 show replica status 命令查看复制状态,以进行确认。

     SHOW SLAVE STATUS\G
    

    如果 Slave_IO_Running 和 Slave_SQL_Running 的状态为“yes”,Seconds_Behind_Master 的值为“0”,则表示复制工作正常。 Seconds_Behind_Master 指示副本的滞后程度。 如果值不是 0,则表示副本仍在处理更新。 确认 Seconds_Behind_Master 的值为 **** 后,可以放心停止复制。

  7. 通过停止复制,可将只读副本提升为主服务器。

  8. 将服务器参数 read_only 设置为 0(关闭),以开始在提升的主服务器上进行写入。

  9. 将应用程序指向运行服务器 8.0 的新主服务器(以前为副本服务器)。 每个服务器都有唯一的连接字符串。 更新应用程序,使之指向(以前的)副本而不是源。

注意

此方案只会在执行步骤 4 到 7 期间导致停机。

常见问题

  • 这是否会导致服务器停机?如果会,会停机多长时间?

    若要在升级期间缩短停机时间,请按照《使用只读副本执行从 MySQL 5.7 到 MySQL 8.0 的最短停机时间的主版本升级》中提及的步骤操作。 服务器在升级过程中将不可用,因此,我们建议你在计划内维护时段执行此操作。 估计的停机时间取决于数据库大小、预配的存储大小(预配的 IOPS)以及数据库中的表的数量。 升级时间与服务器上的表数量直接成正比。 为了估计服务器环境的停机时间,建议你首先在还原后的服务器副本上执行升级。

  • 升级后我的备份会发生什么情况?

    在主版本升级之前创建的用于还原的所有备份(自动/按需备份)将始终还原到使用旧版本 (5.7) 的服务器。 在主版本升级之后创建的所有备份(自动/按需备份)将还原到使用升级后版本 (8.0) 的服务器。 强烈建议在执行主版本升级之前创建按需备份,以便于回滚。

  • 我当前使用的是可突发 SKU,Azure 是否计划将来支持此 SKU 的主版本升级?

    由于此 SKU 的性能限制,可突发 SKU 无法支持主版本升级。

    如果需要在 Azure Database for MySQL 灵活服务器实例上执行主版本升级,并且当前正在使用可突发 SKU,一个临时解决方案是升级到常规用途或业务关键 SKU,执行升级,然后切换回可突发 SKU。

    请注意,升级到更高的 SKU 可能涉及定价更改,并可能导致部署成本增加。 但是,由于升级过程预计不需要很长时间,因此增加的成本应该不大。

后续步骤