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

使用 Azure CLI 还原 Azure Database for PostgreSQL - 灵活服务器(预览版)

本文介绍如何还原使用 Azure 备份备份的 Azure Database for PostgreSQL - 灵活服务器。

在这里,让我们使用示例中资源组 testBkpVaultRG 下现有的备份保管库 TestBkpVault

还原已备份的 PostgreSQL 数据库

设置权限

备份保管库使用托管标识来访问其他 Azure 资源。 若要从备份还原,备份保管库的托管标识需要对服务器应还原到的存储帐户拥有一组权限。 应通过存储帐户为托管标识分配“存储 Blob 数据参与者”角色

提取相关恢复点

若要列出保管库内的所有备份实例,请使用 az data protection backup-instance list 命令。 然后,使用 az data protection backup-instance show 命令提取相关实例。 或者,对于大规模方案,也可使用 az data protection backup-instance list-from-resourcegraph 命令来列出保管库和订阅中的备份实例。

az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQLFlexibleServer -subscriptions 00001111-aaaa-2222-bbbb-3333cccc4444

  {
    "datasourceId": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpgflex",
    "extendedLocation": null,
    "id": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149",
    "identity": null,
    "kind": "",
    "___location": "",
    "managedBy": "",
    "name": "testpgflex-957d23b1-c679-4c94-ade6-c4d34635e149",
    "plan": null,
    "properties": {
      "currentProtectionState": "ProtectionConfigured",
      "dataSourceInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "objectType": "Datasource",
        "resourceID": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpgflex",
        "resourceLocation": "westus",
        "resourceName": "postgres",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "resourceUri": ""
      },
      "dataSourceProperties": null,
      "dataSourceSetInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "objectType": "DatasourceSet",
        "resourceID": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpgflex",
        "resourceLocation": "westus",
        "resourceName": "testpgflex",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "resourceUri": ""
      },
      "friendlyName": "testpgflex",
      "objectType": "BackupInstance",
      "policyInfo": {
        "policyId": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupPolicies/osspol3",
        "policyParameters": null,
        "policyVersion": ""
      },
      "protectionErrorDetails": null,
      "protectionStatus": {
        "errorDetails": null,
        "status": "ProtectionConfigured"
      },
      "provisioningState": "Succeeded",
      "validationType": null
    },
    "protectionState": "ProtectionConfigured",
    "resourceGroup": "testBkpVaultRG",
    "sku": null,
    "subscriptionId": bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f,
    "tags": null,
    "tenantId": aaaabbbb-0000-cccc-1111-dddd2222eeee,
    "type": "microsoft.dataprotection/backupvaults/backupinstances",
    "vaultName": "testBkpVault",
    "zones": null
  }
.
.
.
.
.

标识实例后,使用 az data protection recovery-point list 命令获取相关恢复点。

az dataprotection recovery-point list --backup-instance-name testpgflex-957d23b1-c679-4c94-ade6-c4d34635e149 -g testBkpVaultRG --vault-name TestBkpVault

{
  "id": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpgflex-957d23b1-c679-4c94-ade6-c4d34635e149/recoveryPoints/9da55e757af94261afa009b43cd3222a",
  "name": "9da55e757af94261afa009b43cd3222a",
  "properties": {
    "friendlyName": "2031fdb43a914114b6ce644eb6fcb5ce",
    "objectType": "AzureBackupDiscreteRecoveryPoint",
    "policyName": "oss-clitest-policy",
    "policyVersion": null,
    "recoveryPointDataStoresDetails": [
      {
        "creationTime": "2021-09-13T15:17:41.209845+00:00",
        "expiryTime": null,
        "id": "beddea84-7b30-42a5-a752-7c75baf96a52",
        "metaData": "{\"objectType\":\"PostgresBackupMetadata\",\"version\":\"1.0\",\"postgresVersion\":\"11\",\"dbName\":\"postgres\",\"serverName\":\"testpostgresql\",\"serverFQDN\":\"testpostgresql.postgres.database.azure.com\",\"usernameUsed\":\"backupadmin@testpostgresql\",\"backupToolPath\":\"postgresql-11.6-1\\\\bin\\\\pg_dump.exe\",\"backupType\":\"Full\",\"backupDumpFormat\":\"CUSTOM\",\"backupToolArgsFormat\":\"--no-acl --no-owner --serializable-deferrable --no-tablespaces --quote-all-identifiers -Fc -d postgres://{0}:{1}@{2}:5432/{3}?sslmode=verify-full&sslrootcert=E:\\\\approot\\\\Plugins\\\\Postgres\\\\..\\\\..\\\\postgres-root.crt\",\"storageUnits\":{\"1\":\"DbBackupDumpData\"},\"streamNamesInFirstStorageUnit\":[\"dbbkpdmpdatastream-1631546260050\"],\"pitId\":\"2031fdb43a914114b6ce644eb6fcb5ce\",\"bytesTransferred\":2063,\"dataSourceSize\":8442527,\"backupToolVersion\":\"11\"}",
        "rehydrationExpiryTime": null,
        "rehydrationStatus": null,
        "state": "COMMITTED",
        "type": "VaultStore",
        "visible": true
      }
    ],
    "recoveryPointId": "9da55e757af94261afa009b43cd3222a",
    "recoveryPointTime": "2021-09-13T15:17:41.209845+00:00",
    "recoveryPointType": "Full",
    "retentionTagName": "default",
    "retentionTagVersion": "637671427933449525"
  },
  "resourceGroup": "testBkpVaultRG",
  "systemData": null,
  "type": "Microsoft.DataProtection/backupVaults/backupInstances/recoveryPoints"
}

准备还原请求

只能将 PostgreSQL - 灵活服务器数据库的恢复点还原为文件。

还原为文件

分配了权限的存储帐户中提取容器的统一资源标识符 (URI)。 例如,具有不同订阅的存储帐户 testossstorageaccount 下名为 testcontainer restore 的容器

$contURI = "https://testossstorageaccount.blob.core.windows.net/testcontainerrestore"

使用 az data protection backup-instance restore initialize-for-data-recovery-as-files 命令来准备包含所有相关详细信息的还原请求。

az dataprotection backup-instance restore initialize-for-data-recovery-as-files --datasource-type AzureDatabaseForPostgreSQLFlexibleServer  --restore-___location {___location} --source-datastore VaultStore -target-blob-container-url $contURI --recovery-point-id 9da55e757af94261afa009b43cd3222a > OssRestoreAsFilesReq.JSON

若要验证 JSON 文件是否能成功创建新资源,请使用 az data protection backup-instance validate-for-restore 命令。

触发还原

使用 az data protection backup-instance restore trigger 命令通过前面准备的请求触发还原操作。

az dataprotection backup-instance restore trigger -g testBkpVaultRG --vault-name TestBkpVault --backup-instance-name testpgflex-957d23b1-c679-4c94-ade6-c4d34635e149 --restore-request-object OssRestoreReq.JSON

跟踪作业

使用 az data protection job list 命令跟踪所有作业。 你可以列出所有作业并提取特定作业详细信息。

还可使用 Az.ResourceGraph 来跟踪所有备份保管库中的作业。 使用 az data protection job list-from-resourcegraph 命令获取跨所有备份保管库的相关作业。

az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQLFlexibleServer --operation Restore

从已还原的存储帐户创建 PostgreSQL - 灵活服务器

在目标存储帐户的还原完成后,可使用 pg_restore 实用工具从目标还原 Azure Database for PostgreSQL - 灵活服务器数据库。 使用以下命令连接到一个现有 PostgreSQL - 灵活服务器和一个现有数据库。

pg_restore -h <hostname> -U <username> -d <db name> -Fd -j <NUM> -C <dump directory>

-Fd:目录格式。 -j:作业数。 -C:首先在输出中包含用于创建数据库本身,然后重新连接到该数据库的命令。

下面用示例说明了此语法如何显示:

pg_restore -h <hostname> -U <username> -j <Num of parallel jobs> -Fd -C -d <databasename> sampledb_dir_format

如果你有多个数据库要还原,请为每个数据库重新运行前面的命令。

此外,通过使用多个并发作业 -j,可缩短在多 vCore 目标服务器上还原大型数据库的时间。 作业数可以等于或小于为目标服务器分配的 vCPU 数。

后续步骤