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

将 PostgreSQL 数据库迁移到已启用 Azure Arc 的 PostgreSQL 服务器

本文档介绍将现有的 PostgreSQL 数据库(不在已启用 Azure Arc 的数据服务中托管的数据库)放入已启用 Azure Arc 的 PostgreSQL 服务器中的步骤。

注意

作为预览版功能,本文中介绍的技术受制于 Microsoft Azure 预览版补充使用条款

发行说明中提供了最近的更新。

注意事项

已启用 Azure Arc 的 PostgreSQL 服务器是 PostgreSQL 的社区版本。 因此,任何在 Azure Arc 之外处理 PostgreSQL 的工具都应该适用于由 Azure Arc 启用的 PostgreSQL 服务器。

因此,使用现在用于 Postgres 的一组工具,应该能够执行以下操作:

  1. 从托管在 Azure Arc 之外的实例备份 Postgres 数据库
  2. 在已启用 Azure Arc 的 PostgreSQL 服务器中还原它

你要执行的只剩:

  • 重置服务器参数
  • 重置安全性上下文:重新创建用户、角色和重置权限...

若要执行此备份/还原操作,可以使用任何能够针对 Postgres 进行备份/还原的工具。 例如:

  • Azure Data Studio 及其 Postgres 扩展
  • pgcli
  • pgAdmin
  • pg_dump
  • pg_restore
  • psql
  • ...

示例

让我们使用 pgAdmin 工具来说明这些步骤。 请考虑以下设置:

  • 源:
    在裸机服务器上本地运行的 Postgres 服务器,名为 JEANYDSRV。 它的版本为 14,托管一个名为 MyOnPremPostgresDB 的数据库,该数据库具有一个包含 1 行的表 T1 Migrate-source

  • 目标:
    在 Azure Arc 环境中运行的 Postgres 服务器,名为 postgres01。 它的版本为 14。 除了标准 Postgres 数据库,它没有任何其他数据库。
    Migrate-destination

在本地备份源数据库

Migrate-source-backup

对其进行配置:

  1. 为它指定文件名:MySourceBackup
  2. 将格式设置为“自定义”Migrate-source-backup-configure

备份成功完成:
Migrate-source-backup-completed

在已启用 Azure Arc 的 PostgreSQL 服务器中的目标系统上创建一个空数据库

注意

若要在 pgAdmin 工具中注册 Postgres 实例,需要使用 Kubernetes 群集中实例的公共 IP,并相应地设置端口和安全性上下文。 运行以下命令后,你将在 psql 终结点行上找到这些详细信息:

az postgres server-arc endpoint list -n postgres01 --k8s-namespace <namespace> --use-k8s

该命令返回如下输出:

{
  "instances": [
    {
      "endpoints": [
    "Description": "PostgreSQL Instance",
    "Endpoint": "postgresql://postgres:<replace with password>@12.345.123.456:1234"
  },
  {
    "Description": "Log Search Dashboard",
    "Endpoint": "https://12.345.123.456:12345/kibana/app/kibana#/discover?_a=(query:(language:kuery,query:'custom_resource_name:\"postgres01\"'))"
  },
  {
    "Description": "Metrics Dashboard",
    "Endpoint": "https://12.345.123.456:12345/grafana/d/postgres-metrics?var-Namespace=arc3&var-Name=postgres01"
  }
],
"engine": "PostgreSql",
"name": "postgres01"
}
  ],
  "namespace": "arc"
}

让我们将目标数据库命名为 RESTORED_MyOnPremPostgresDB

Migrate-destination-db-create

在 Arc 设置中还原数据库

Migratre-db-restore

配置还原:

  1. 指向包含要还原的备份的文件:MySourceBackup

  2. 将格式设置为“自定义”或“tar”Migrate-db-restore-configure

  3. 请单击“还原”。

    还原成功。
    Migrate-db-restore-completed

验证该数据库是否在已启用 Azure Arc 的 PostgreSQL 服务器中成功还原

使用以下方法之一:

pgAdmin

展开在 Azure Arc 设置中托管的 Postgres 实例。 你将看到已还原的数据库中的表,当选择数据时,它会显示与本地实例中拥有的相同的行:

Migrate-db-restore-verification

从 Azure Arc 设置中的 psql

在 Arc 设置中,可以使用 psql 连接到 Postgres 实例、将数据库上下文设置为 RESTORED_MyOnPremPostgresDB 以及查询数据:

  1. 列出终结点,以协助产生 psql 连接字符串:

    az postgres server-arc endpoint list -n postgres01 --k8s-namespace <namespace> --use-k8s
    
    {
      "instances": [
        {
          "endpoints": [
        "Description": "PostgreSQL Instance",
        "Endpoint": "postgresql://postgres:<replace with password>@12.345.123.456:1234"
      },
      {
        "Description": "Log Search Dashboard",
        "Endpoint": "https://12.345.123.456:12345/kibana/app/kibana#/discover?_a=(query:(language:kuery,query:'custom_resource_name:\"postgres01\"'))"
      },
      {
        "Description": "Metrics Dashboard",
        "Endpoint": "https://12.345.123.456:12345/grafana/d/postgres-metrics?var-Namespace=arc3&var-Name=postgres01"
      }
    ],
    "engine": "PostgreSql",
    "name": "postgres01"
    }
      ],
      "namespace": "arc"
    }
    
  2. psql 连接字符串,使用 -d 参数指示数据库名称。 使用下面的命令时,系统将提示你输入密码:

    psql -d RESTORED_MyOnPremPostgresDB -U postgres -h 10.0.0.4 -p 32639
    

    psql 连接。

    Password for user postgres:
    psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1), server 12.3 (Debian 12.3-1.pgdg100+1))
    WARNING: psql major version 10, server major version 12.
          Some psql features might not work.
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
    Type "help" for help.
    
    RESTORED_MyOnPremPostgresDB=#   
    
  3. 选择该表,你将看到你从本地 Postgres 实例还原的数据:

    RESTORED_MyOnPremPostgresDB=# select * from t1;
    
     col1 |    col2
    ------+-------------
        1 | BobbyIsADog
    (1 row)
    

注意

  • 目前,无法将现有的会在本地或任何其他云中运行的 Postgres 实例“加入到 Azure Arc”。 换句话说,无法在现有 Postgres 实例上安装某种“Azure Arc 代理”来使其成为 Azure Arc 启用的 Postgres 设置。转而,你需要创建新的 Postgres 实例,并将数据传输到该实例。 你可以使用以上所示的方法来实现此目的,也可以使用所选的任何 ETL 工具。

*在这些文档中,跳过“登录到 Azure 门户”和“创建 Azure Database for PostgreSQL”部分。 在 Azure Arc 部署中执行剩余步骤。 这些部分特定于在 Azure 云中作为 PaaS 服务提供的 Azure Database for PostgreSQL 服务器,但文档的其他部分直接适用于已启用 Azure Arc 的 PostgreSQL 服务器。