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

教程:通过 Azure 门户使用 DMS(经典版)将 PostgreSQL 联机迁移到 Azure Database for PostgreSQL

可以使用 Azure 数据库迁移服务在尽量缩短应用程序停机时间的情况下,将数据库从本地 PostgreSQL 实例迁移到 Azure Database for PostgreSQL。 本教程介绍如何在 Azure 数据库迁移服务中使用联机迁移活动将“listdb”示例数据库从 PostgreSQL 13.10 的本地实例迁移到 Azure Database for PostgreSQL。

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

  • 使用 pg_dump 实用工具迁移示例架构。
  • 创建 Azure 数据库迁移服务的实例。
  • 在 Azure 数据库迁移服务中创建迁移项目。
  • 运行迁移。
  • 监视迁移。
  • 执行直接转换迁移。

注意

使用 Azure 数据库迁移服务执行联机迁移需要基于“高级”定价层创建实例。 我们对磁盘进行加密,以防止在迁移过程中数据被盗

重要

为获得最佳迁移体验,Microsoft 建议在目标数据库所在的 Azure 区域中创建 Azure 数据库迁移服务的实例。 跨区域或地理位置移动数据可能会减慢迁移过程并引入错误。

先决条件

要完成本教程,需要:

  • 下载并安装 PostgreSQL 社区版。 源 PostgreSQL 服务器版本必须不低于 9.4。 有关详细信息,请参阅支持的 PostgreSQL 数据库版本

    另请注意,目标 Azure Database for PostgreSQL 版本必须等于或晚于本地 PostgreSQL 版本。 例如,PostgreSQL 12 可以迁移到 Azure Database for PostgreSQL 12 或更高版本,但不能迁移到 Azure Database for PostgreSQL 11。

  • 创建 Azure Database for PostgreSQL 服务器

  • 使用 Azure 资源管理器部署模型创建适合 Azure 数据库迁移服务的 Microsoft Azure 虚拟网络,它将使用 ExpressRouteVPN 为本地源服务器提供站点到站点连接。 有关创建虚拟网络的详细信息,请参阅虚拟网络文档,尤其是提供了分步详细信息的快速入门文章。

    注意

    在虚拟网络设置期间,如果将 ExpressRoute 与 Microsoft 的网络对等互连一起使用,则请将以下服务终结点添加到要在其中预配该服务的子网:

    • 目标数据库终结点(例如 SQL 终结点、Azure Cosmos DB 终结点等)
    • 存储终结点
    • 服务总线终结点

    Azure 数据库迁移服务缺少 Internet 连接,因此必须提供此配置。

  • 请确保虚拟网络的网络安全组 (NSG) 规则不阻止 ServiceBus、存储服务和 AzureMonitor 的 ServiceTag 出站端口 443。 有关虚拟网络 NSG 流量筛选的更多详细信息,请参阅使用网络安全组筛选网络流量一文。

  • 配置针对数据库引擎访问的 Windows 防火墙

  • 打开 Windows 防火墙,使 Azure 数据库迁移服务能够访问源 PostgreSQL 服务器(默认情况下为 TCP 端口 5432)。

  • 在源数据库的前面使用了防火墙设备时,可能需要添加防火墙规则以允许 Azure 数据库迁移服务访问要迁移的源数据库。

  • 为 Azure Database for PostgreSQL 创建服务器级防火墙规则,以允许 Azure 数据库迁移服务访问目标数据库。 提供用于 Azure 数据库迁移服务的虚拟网络子网范围。

  • 在 postgresql.config 文件中启用逻辑复制,并设置以下参数:

    • wal_level = logical
    • max_replication_slots = [槽数],建议设置为“5 个槽”
    • max_wal_senders =[并发任务数] - max_wal_senders 参数设置可以运行的并发任务数,建议设置为“10 个任务”
  • 用户必须在托管源数据库的服务器上具有“复制”角色。

重要

现有数据库中的所有表都需要主键,以确保可以将更改同步到目标数据库。

迁移示例架构

若要完成所有数据库对象(例如表架构、索引和存储过程),需从源数据库提取架构并将其应用到此数据库。

  1. 使用 pg_dump -s 命令为数据库创建架构转储文件。

    pg_dump -O -h hostname -U db_username -d db_name -s > your_schema.sql
    

    例如,若要为“listdb”数据库创建架构转储文件:

    pg_dump -O -h localhost -U postgres -d listdb -s -x > listdbSchema.sql
    

    若要详细了解如何使用 pg_dump 实用程序,请参阅 pg-dump 教程中的示例。

  2. 在目标环境中创建一个空数据库,即 Azure Database for PostgreSQL。

    有关如何连接和创建数据库的详细信息,请参阅在 Azure 门户中创建 Azure Database for PostgreSQL 服务器一文。

  3. 通过还原架构转储文件,将架构导入已创建的目标数据库。

    psql -h hostname -U db_username -d db_name < your_schema.sql
    

    例如:

    psql -h mypgserver-20170401.postgres.database.azure.com  -U postgres -d migratedb < listdbSchema.sql
    

    注意

    迁移服务在内部处理外键和触发器的启用/禁用,以确保可靠且稳定的数据迁移。 因此,你不需要担忧对目标数据库架构所做的任何修改。

注册资源提供程序

在创建数据库迁移服务的第一个实例之前,请注册 Microsoft.DataMigration 资源提供程序。

  1. 登录到 Azure 门户。 搜索并选择“订阅”。

    显示门户订阅

  2. 选择要在其中创建 Azure 数据库迁移服务实例的订阅,再选择“资源提供程序”。

    显示资源提供程序

  3. 搜索迁移,然后选择 Microsoft.DataMigration 旁的“注册” 。

    注册资源提供程序

创建 Azure 数据库迁移服务实例

  1. 在 Azure 门户菜单或“主页”页上,选择“创建资源” 。 搜索并选择“Azure 数据库迁移服务”。

    Azure 市场

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

    创建 Azure 数据库迁移服务实例

    选择相应的源服务器类型和目标服务器类型,然后选择“数据库迁移服务(经典)”选项。

    选择“数据库迁移服务(经典)”方案

  3. 在“创建迁移服务”基本信息屏幕中:

    • 选择订阅。
    • 新建资源组或使用现有资源组。
    • 指定 Azure 数据库迁移服务实例的名称。
    • 选择要在其中创建 Azure 数据库迁移服务实例的位置。
    • 选择“Azure”作为服务模式。
    • 选择定价层。 有关成本和定价层的详细信息,请参阅价格页

    配置 Azure 数据库迁移服务实例基本信息设置

    • 选择“下一页:网络”。
  4. 在“创建迁移服务”网络屏幕中:

    • 选择现有虚拟网络或新建一个。 虚拟网络为 Azure 数据库迁移服务提供源服务器和目标实例的访问权限。 有关如何在 Azure 门户中创建虚拟网络的详细信息,请参阅使用 Azure 门户创建虚拟网络一文。

    配置 Azure 数据库迁移服务实例网络设置

    • 选择“查看 + 创建”,查看详细信息,然后选择“创建”以创建服务 。

    • 片刻之后,Azure 数据库迁移服务的实例即会创建并可供使用:

    迁移服务已创建

创建迁移项目

创建服务后,在 Azure 门户中找到并打开它,然后创建一个新的迁移项目。

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

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

  2. 在“Azure 数据库迁移服务”屏幕上,搜索所创建的 Azure 数据库迁移服务实例名称,选择该实例,然后选择“+ 新建迁移项目” 。

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

  3. 在“新建迁移项目”屏幕上指定项目名称,在“源服务器类型”文本框中选择“PostgreSQL”,在“目标服务器类型”文本框中选择“Azure Database for PostgreSQL” 。

  4. 在“迁移活动类型”部分选择“联机数据迁移”。

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

    注意

    也可以现在就选择“仅创建项目”来创建迁移项目,在以后再执行迁移。

  5. 选择“创建并运行活动”以成功使用 Azure 数据库迁移服务迁移数据。

指定源详细信息

  1. 在“添加源详细信息” 屏幕上,指定源 PostgreSQL 实例的连接详细信息。

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

指定目标详细信息

  1. 在“目标详细信息”屏幕上指定目标 Azure Database for PostgreSQL 灵活服务器的连接详细信息,该服务器是使用 pg_dump 将架构部署到的预配实例。

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

  2. 单击“下一步: 选择数据库”,然后在“选择数据库”屏幕上,映射源和目标数据库以进行迁移。

    如果目标数据库包含的数据库名称与源数据库的相同,则 Azure 数据库迁移服务默认会选择目标数据库。

    映射数据库与目标屏幕的屏幕截图。

  3. 单击“下一步: 选择表”,然后在“选择表”屏幕上,选择需要迁移的所需表。

    选择表进行迁移屏幕的屏幕截图。

  4. 单击“下一步: 配置迁移设置”,然后在“配置迁移设置”屏幕上接受默认值。

    配置迁移设置屏幕的屏幕截图。

  5. 在“迁移摘要”屏幕上的“活动名称”文本框中指定迁移活动的名称,然后查看摘要,确保源和目标详细信息与此前指定的信息相符。

    迁移摘要屏幕的屏幕截图。

运行迁移

  • 选择“开始迁移”。

    迁移活动窗口随即出现,活动的“状态”应更新并显示为“正在进行备份” 。

监视迁移

  1. 在迁移活动屏幕上选择“刷新”,以便更新显示,直到迁移的“状态”显示为“完成”

    迁移监视屏幕的屏幕截图。

  2. 完成迁移后,请在“数据库名称”下选择特定数据库即可转到“完整数据加载”和“增量数据同步”操作的迁移状态 。

    注意

    “完整数据加载”会显示初始加载迁移状态,而“增量数据同步”则会显示变更数据捕获 (CDC) 状态。

    迁移完全加载详细信息屏幕的屏幕截图。

    迁移增量加载详细信息屏幕的屏幕截图。

执行迁移直接转换

完成初始的完整加载以后,数据库会被标记为“直接转换可供执行”。

  1. 如果准备完成数据库迁移,请选择“启动直接转换”。

  2. 等到“挂起的更改” 计数器显示“0” 以确保源数据库的所有传入事务都已停止,选中“确认” 复选框,然后选择“应用” 。

    直接转换完成屏幕的屏幕截图。

  3. 当数据库迁移状态显示“已完成”时重新创建序列(如适用),并将应用程序连接到 Azure Database for PostgreSQL 的新目标实例。

后续步骤