教程:通过 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 数据库迁移服务执行联机迁移需要基于“高级”定价层创建实例。 我们对磁盘进行加密,以防止在迁移过程中数据被盗

重要

为获得最佳迁移体验,Azure 建议在目标数据库所在的 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 数据库迁移服务的 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.chinacloudapi.cn  -U postgres -d migratedb < listdbSchema.sql
    

    注意

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

注册资源提供程序

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

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

    Show portal subscriptions

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

    Show resource providers

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

    Register resource provider

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

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

    Azure Marketplace

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

    Create Azure Database Migration Service instance

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

    Select Database Migration Service (Classic) scenario

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

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

    Configure Azure Database Migration Service instance basics settings

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

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

    Configure Azure Database Migration Service instance networking settings

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

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

    Migration service created

创建迁移项目

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

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

    Screenshot of a Search Azure Database Migration Service.

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

    Screenshot of a Searching the Azure Database Migration Service instance.

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

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

    Screenshot of a Create a new migration project.

    注意

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

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

指定源详细信息

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

    Screenshot of an Add source details screen.

指定目标详细信息

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

    Screenshot of an Add target details screen.

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

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

    Screenshot of a map databases with the target screen.

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

    Screenshot of a selecting the tables for migration screen.

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

    Screenshot of configuring migration setting screen.

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

    Screenshot of migration summary screen.

运行迁移

  • 选择“开始迁移”。

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

监视迁移

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

    Screenshot of migration monitoring screen.

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

    注意

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

    Screenshot of migration full load details screen.

    Screenshot of migration incremental load details screen.

执行迁移直接转换

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

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

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

    Screenshot of cutover completion screen.

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

后续步骤