教程:通过 Azure 门户使用 DMS 以联机方式将 Azure Database for PostgreSQL 单一服务器迁移/升级到 Azure Database for PostgreSQL 单一服务器

可以使用 Azure 数据库迁移服务在尽量缩短停机时间的情况下,将数据库从 Azure Database for PostgreSQL 单一服务器实例迁移到相同或不同版本的 Azure Database for PostgreSQL 单一服务器实例或 Azure Database for PostgreSQL 灵活服务器。 本教程介绍如何在 Azure 数据库迁移服务中使用联机迁移活动,将“DVD Rental”示例数据库从 Azure Database for PostgreSQL v10 迁移到 Azure Database for PostgreSQL 单一服务器。

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

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

注意

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

重要

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

重要

PostgreSQL 版本 9.x 及更高版本支持从 Azure Database for PostgreSQL 进行迁移。 你还可以使用本教程从一个 Azure Database for PostgreSQL 实例迁移到另一个 Azure Database for PostgreSQL 实例或超大规模 (Citus) 实例。 请注意,从 PostgreSQL 9.5 和 9.6 进行迁移需要在源实例中具有额外的逻辑复制权限

先决条件

要完成本教程,需要:

  • 请检查 Azure 数据库迁移服务支持的迁移方案的状态,以了解支持的迁移和版本组合。

  • 现有的 Azure Database for PostgreSQL 版本 10 和更高版本的实例,以及“DVD Rental”数据库。

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

  • 创建 Azure Database for PostgreSQL 服务器创建 Azure Database for PostgreSQL - 超大规模 (Citus) 服务器,作为要将数据迁移到的目标数据库服务器。

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

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

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

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

  • 在 Azure Database for PostgreSQL 源中启用逻辑复制

  • 在用作源的 Azure Database for PostgreSQL 实例中设置以下服务器参数:

    • max_replication_slots = [槽数],建议设置为“十个槽”
    • max_wal_senders =[并发任务数] - max_wal_senders 参数设置可以运行的并发任务数,建议设置为“10 个任务”

注意

以上服务器参数是静态的,需要重新启动 Azure Database for PostgreSQL 实例才能生效。 有关切换服务器参数的详细信息,请参阅配置 Azure Database for PostgreSQL 服务器参数

重要

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

迁移示例架构

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

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

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

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

    pg_dump -O -h mypgserver-source.postgres.database.chinacloudapi.cn -U pguser@mypgserver-source -d dvdrental -s -x > dvdrentalSchema.sql
    

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

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

    有关如何连接和创建数据库的详细信息,请参阅文章在 Azure 门户中创建 Azure Database for PostgreSQL 服务器在 Azure 门户中创建 Azure Database for PostgreSQL - 超大规模 (Citus) 服务器

    注意

    Azure Database for PostgreSQL - 超大规模 (Citus) 的实例只有单个数据库:citus。

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

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

    例如:

    psql -h mypgserver-source.postgres.database.chinacloudapi.cn  -U pguser@mypgserver-source -d dvdrental citus < dvdrentalSchema.sql
    

    注意

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

注册资源提供程序

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

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

    Show portal subscriptions

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

    Show resource providers

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

    Register resource provider

创建 DMS 实例

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

    Azure Marketplace

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

    Create Azure Database Migration Service instance

  3. 在“创建迁移服务”屏幕上,指定服务的名称、订阅、新的或现有资源组以及位置。

  4. 选择现有虚拟网络或新建一个。

    虚拟网络为 Azure 数据库迁移服务提供对源 PostgreSQL 服务器和目标 Azure Database for PostgreSQL 实例的访问权限。

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

  5. 选择定价层。

    有关成本和定价层的详细信息,请参阅价格页

    Configure Azure Database Migration Service instance settings

  6. 选择“查看 + 创建”以创建服务。

    服务创建将在约 10 到 15 分钟内完成。

创建迁移项目

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

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

    Locate all instances of Azure Database Migration Service

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

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

    注意

    在“源服务器类型”中选择“PostgreSQL”,即使源服务器是“Azure Database for PostgreSQL”实例 。

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

    Create Azure Database Migration Service project

    注意

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

  5. 选择“保存”,注意成功使用 Azure 数据库迁移服务迁移数据所要满足的要求,然后选择“创建并运行活动” 。

指定源详细信息

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

    Add Source Details screen

    注意

    可以在“Azure Database for PostgreSQL”门户中找到诸如“服务器名称”、“服务器端口”、“数据库名称”等详细信息。

  2. 选择“保存” 。

指定目标详细信息

  1. 在“目标详细信息”屏幕上,指定目标超大规模 (Citus) 服务器的连接详细信息,该服务器是超大规模 (Citus) 的预配实例,DVD Rental 架构通过使用 pg\dump 部署到该实例 。

    Target details screen

    注意

    可以从一个 Azure Database for PostgreSQL 实例迁移到另一个 Azure Database for PostgreSQL 单一服务器实例或超大规模 (Citus) 服务器。

  2. 选择“保存”,然后在“映射到目标数据库”屏幕上,映射源和目标数据库以进行迁移。

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

    Map to target databases screen

  3. 选择“保存”,然后在“迁移设置”屏幕上接受默认值 。

    Migration settings screen

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

    Migration summary screen

运行迁移

  • 选择“运行迁移”。

迁移活动窗口随即出现,活动的“状态”应更新并显示为“正在进行备份” 。 从 Azure Database for PostgreSQL 9.5 或 9.6 进行升级时,可能会遇到以下错误:

一个方案报告了未知错误。 28000: 主机“40.121.141.121”、用户“sr”没有复制连接的 pg_hba.conf 条目

这是因为 PostgreSQL 没有适当的权限来创建所需的逻辑复制项目。 要启用所需权限,可以执行以下操作:

  1. 为尝试迁移/升级的源 Azure Database for PostgreSQL 服务器打开“连接安全”设置。
  2. 添加一个名称以“_replrule”结尾的新防火墙规则,并将该 IP 地址从错误消息添加到“起始 IP”和“结束 IP”字段。 对于上述错误示例:

防火墙规则名称 = sr_replrule;起始 IP = 40.121.141.121;结束 IP = 40.121.141.121

  1. 单击“保存”完成更改。
  2. 重试 DMS 活动。

监视迁移

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

    Monitor migration process

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

    注意

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

    Full data load details

    Incremental data sync details

执行迁移直接转换

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

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

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

    Complete cutover screen

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

注意

可使用 Azure 数据库迁移服务在缩短停机时间的情况下,在 Azure Database for PostgreSQL 单一服务器中执行主要版本升级。 首先,使用所需的更高 PostgreSQL 版本、网络设置和参数配置目标数据库。 然后,可以使用上述过程启动向目标数据库的迁移。 切换到目标数据库服务器后,可以将应用程序连接字符串更新为指向目标数据库服务器。

后续步骤