应用程序迁移

已完成

将数据库从本地迁移到 Azure 后,需要更新现有应用程序,使其能够在新位置访问 MySQL。

原始本地服务器和数据库将包含可定义与用户关联的特权的角色、他们可执行的操作以及他们可对其执行这些操作的对象。 Azure Database for MySQL 使用与在本地运行的 PostgreSQL 相同的身份验证和授权机制。

在本单元中,你将了解需要对应用程序进行哪些更新才能连接到新迁移的 Azure Database for MySQL。

手动创建用户

原始本地服务器和数据库将包含用户、他们执行的操作以及他们对其执行这些操作的对象。 Azure Database for MySQL 使用与在本地运行的 MySQL 相同的身份验证和授权机制。

使用 Azure 数据库迁移服务将 MySQL 数据库传输到 Azure Database for MySQL 时,不会复制用户。 你必须手动地为目标数据库中的表的管理员和用户重新创建必要的用户帐户。 要执行这些任务,请使用 SQL 语言或实用工具(如 MySQL Workbench)。 运行 CREATE USER 命令。 使用 GRANT 命令向用户分配所需的特权。 例如:

CREATE USER 'myuseraccount'@'%' IDENTIFIED BY 'mY!P@ss0rd';
GRANT ALL PRIVILEGES ON DATABASE [Database Name].* TO myuseraccount;
FLUSH PRIVILEGES;

若要查看本地数据库中的现有授权,请运行以下 SQL 语句:

USE [Database Name];

SHOW GRANTS FOR 'myuseraccount'@'%';;

重新配置应用程序

重新配置应用程序来连接到 Azure Database for MySQL 的这一过程很简单。 但是,制定迁移应用程序的策略至关重要。

重新配置 MySQL 应用程序时的注意事项

在企业环境中,可能会有许多应用程序在针对同一个 MySQL 数据库运行。 可能有大量用户在运行这些应用程序。 你需要确保当你从现有系统切换到 Azure Database for MySQL 时,系统仍将正常运行,用户可继续完成作业,并且业务关键型操作仍可正常运行。 模块 1 的第 2 课“有关迁移的注意事项”概述了许多问题。

将 MySQL 数据库迁移到 Azure 时,需要考虑一些具体细节:

  • 如果要执行脱机迁移,但仍然使用旧的数据库,那么原始 MySQL 数据库中的数据与 Azure 上运行的新数据库中的数据可能很快就开始出现差异。 如果你将整个系统完全停用一小段时间,然后在重新启动之前将所有应用程序切换到新系统,那么可使用脱机迁移。 对于关键业务系统,这种方法不可行。 如果要迁移到在 Azure 虚拟机上运行的 MySQL,可在本地系统与 Azure 中运行的系统之间配置 MySQL 复制。 本机 MySQL 复制仅单向运行,但有第三方解决方案来支持 MySQL 服务器之间的双向复制。 这些解决方案不适用于 Azure Database for MySQL。
  • 如果要执行联机迁移,则 Azure Database for MySQL 服务会设置从本地数据库到 Azure 中运行的数据库的复制。 初始数据传输完成后,复制可确保在本地数据库中所作的任何更改都会复制到 Azure 中的数据库,但反向也不行。

在这两种情况下,都应确保不会因意外覆盖而丢失实时数据。 例如,在联机迁移中,连接到 Azure Database for MySQL 中运行的数据库的应用程序可以让仍使用本地数据库的应用程序随意覆盖其更改。 因此,你应该考虑以下方法:

  • 根据应用程序的工作负载类型迁移应用程序。 以只读形式访问数据的应用程序可安全地移动到 Azure Database for MySQL 中运行的数据库,并且将看到由仍使用本地数据库的应用程序做出的所有更改。 如果只读应用程序不需要完全处于最新状态的数据,那么你也可以采用反向策略。
  • 根据用户的工作负载类型迁移用户。 此策略与上一个策略类似,不同之处在于,有些用户仅生成报表,而其他用户可修改数据。 可根据用户要求,将同一应用程序配置为连接到适当的数据库。
  • 根据应用程序使用的数据集迁移应用程序。 如果不同的应用程序使用不同的数据子集,那么你可以分别迁移这些应用程序。

重新配置应用程序

若要重新配置应用程序,请将其指向新数据库。 大多数编写良好的应用程序应隔离连接逻辑,这应该是代码中唯一需要修改的部分。 在许多情况下,连接信息可能存储为配置信息,因此只需更新该信息。

可在 Azure 门户中的 Azure Database for MySQL 服务的“连接字符串”页面上找到 Azure Database for MySQL 服务的连接信息。 Azure 提供许多常用编程语言和框架的相关信息。

Image showing the Connection strings page for Azure Database for MySQL item in the Azure portal

打开网络端口

如本模块第 1 课所述,Azure Database for MySQL 是在防火墙后面运行的受保护服务。 除非服务已识别出客户端的 IP 地址,否则客户端无法进行连接。 对于运行需要连接到数据库的应用程序的客户端,必须添加 IP 地址或地址块范围。

测试和验证应用程序

在将应用程序和用户切换到新数据库之前,请务必确保已正确配置所有内容。

从“空运行”应用程序开始,并以每种角色的身份进行连接,确保功能正常运行。

接下来,执行“浸泡测试”来模拟一段时间内同时运行典型工作负载的用户数量。 监视系统,并验证是否已向 Azure Database for MySQL 服务分配足够的资源。

现在可开始向用户推出系统。 实现某种形式的“Canary 测试”可能会有好处,在这种测试中,一小部分用户会被意外转移到系统中。 这样,你可以公正地判断用户使用新数据库的体验是否与之前相同,还是更好或更差了。