다음을 통해 공유


Azure CLI를 사용하여 PostgreSQL 데이터베이스 복원

이 문서에서는 Azure CLI를 사용하여 Azure Backup을 통해 백업한 Azure Database for PostgreSQL 서버로 PostgreSQL 데이터베이스를 복원하는 방법을 설명합니다. Azure Portal, Azure PowerShellREST API를 사용하여 PostgreSQL 데이터베이스를 복원할 수도 있습니다.

PostgreSQL 데이터베이스는 PaaS(Platform as a Service) 데이터베이스이므로 백업이 수행된 기존 데이터베이스를 대체하여 복원하는 OLR(Original-Location Recovery) 옵션은 지원되지 않습니다. 복구 지점에서 복원하여 동일한 Azure Database for PostgreSQL 서버 또는 다른 PostgreSQL 서버에서 새 데이터베이스를 만들 수 있습니다. 이 옵션을 Alternate-Location 복구(ALR)라고 합니다. ALR은 원본 데이터베이스와 복원된(새) 데이터베이스를 모두 유지하는 데 도움이 됩니다.

이 문서의 예제는 리소스 그룹 TestBkpVault 아래에 있는 기존 Backup 볼트 testBkpVaultRG을 참조합니다.

백업된 PostgreSQL 데이터베이스 복원

권한 설정

백업 볼트는 관리되는 ID를 사용하여 다른 Azure 리소스에 액세스합니다. 백업에서 복원하려면, Backup 자격 증명 모음의 관리 ID는 데이터베이스를 복원을 수행할 Azure Database for PostgreSQL 서버에 대한 권한 집합이 필요합니다.

대상 PostgreSQL 서버에서 자격 증명 모음의 시스템 할당 관리 ID에 대한 관련 권한을 할당하려면 PostgreSQL 데이터베이스를 백업하는 데 필요한 권한 집합을 참조하세요.

복구 지점을 스토리지 계정에 파일로 복원하려면 백업 자격 증명 모음의 시스템 할당 관리 ID에 대상 스토리지 계정에 대한 액세스 권한이 필요합니다.

관련 복구 지점 가져오기

금고 내의 모든 백업 인스턴스를 나열하려면 az dataprotection backup-instance list 명령어를 사용하십시오. 그런 다음 az dataprotection backup-instance show 명령을 사용하여 관련 인스턴스를 가져옵니다.

또는 대규모 시나리오의 경우, az dataprotection backup-instance list-from-resourcegraph 명령을 사용하면 자격 증명 모음 및 구독에 걸쳐 백업 인스턴스를 나열할 수 있습니다.

az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL -subscriptions "xxxxxxxx-xxxx-xxxx-xxxx"

  {
    "datasourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/servers/testpostgresql/databases/empdb11",
    "extendedLocation": null,
    "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
    "identity": null,
    "kind": "",
    "___location": "",
    "managedBy": "",
    "name": "testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
    "plan": null,
    "properties": {
      "currentProtectionState": "ProtectionConfigured",
      "dataSourceInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/servers/databases",
        "objectType": "Datasource",
        "resourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/servers/testpostgresql/databases/empdb11",
        "resourceLocation": "westus",
        "resourceName": "postgres",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/servers/databases",
        "resourceUri": ""
      },
      "dataSourceProperties": null,
      "dataSourceSetInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/servers/databases",
        "objectType": "DatasourceSet",
        "resourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/servers/testpostgresql",
        "resourceLocation": "westus",
        "resourceName": "testpostgresql",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/servers",
        "resourceUri": ""
      },
      "datasourceAuthCredentials": {
        "objectType": "SecretStoreBasedAuthCredentials",
        "secretStoreResource": {
          "secretStoreType": "AzureKeyVault",
          "uri": "https://vikottur-test.vault.azure.net/secrets/dbauth3",
          "value": null
        }
      },
      "friendlyName": "testpostgresql\\empdb11",
      "objectType": "BackupInstance",
      "policyInfo": {
        "policyId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/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": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "tags": null,
    "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "type": "microsoft.dataprotection/backupvaults/backupinstances",
    "vaultName": "testBkpVault",
    "zones": null
  }
.
.
.
.
.

인스턴스를 식별한 후 다음 명령을 사용하여 az dataprotection recovery-point list 관련 복구 지점을 가져옵니다.

az dataprotection recovery-point list --backup-instance-name testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e -g testBkpVaultRG --vault-name TestBkpVault

{
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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"
}

보관 계층에서 복구 지점을 가져와야 하는 경우 변수 typerecoveryPointDataStoreDetails입니다ArchiveStore.

복원 요청 준비

PostgreSQL 데이터베이스에는 다양한 복원 옵션이 있습니다. 복구 지점을 다른 데이터베이스로 복원하거나 파일로 복원할 수 있습니다. 복구 지점은 보관 계층에 있을 수도 있습니다.

데이터베이스로 복원

사용 권한을 할당한 대상 PostgreSQL 서버를 사용하여 새 PostgreSQL 데이터베이스의 Azure Resource Manager ID를 생성합니다. 필수 PostgreSQL 데이터베이스 이름도 구성합니다. 예를 들어, PostgreSQL 데이터베이스는 다른 구독을 가진 리소스 그룹에서 emprestored21에 있는 대상 PostgreSQL 서버 targetossserver 아래에 targetrg로 이름을 지정할 수 있습니다.

$targetOssId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourceGroups/targetrg/providers/providers/Microsoft.DBforPostgreSQL/servers/targetossserver/databases/emprestored21"

az dataprotection backup-instance restore initialize-for-data-recovery 명령을 사용하여 모든 관련 세부 정보를 사용하여 복원 요청을 준비합니다.

az dataprotection backup-instance restore initialize-for-data-recovery --datasource-type AzureDatabaseForPostgreSQL  --restore-___location {___location} --source-datastore VaultStore --target-resource-id $targetOssId --recovery-point-id 9da55e757af94261afa009b43cd3222a --secret-store-type AzureKeyVault --secret-store-uri "https://restoreoss-test.vault.azure.net/secrets/dbauth3" > OssRestoreReq.JSON

보관 기반 복구 지점의 경우 다음을 수행해야 합니다.

  1. 보관 데이터 저장소에서 복구 데이터 저장소로 복구합니다.
  2. 원본 데이터 저장소를 수정합니다.
  3. 리하이드레이션 우선 순위를 지정하려면 다른 매개 변수를 추가합니다.
  4. 리하이딩된 복구 지점을 자격 증명 모음 데이터 저장소에 보존해야 하는 기간을 지정합니다.
  5. 이 복구 지점에서 데이터베이스로 복원합니다.

다음 명령을 사용하여 이전에 언급한 모든 작업에 대한 요청을 한 번에 준비합니다.

az dataprotection backup-instance restore initialize-for-data-recovery --datasource-type AzureDatabaseForPostgreSQL  --restore-___location {___location} --source-datastore ArchiveStore --target-resource-id $targetOssId --recovery-point-id 9da55e757af94261afa009b43cd3222a --secret-store-type AzureKeyVault --secret-store-uri "https://restoreoss-test.vault.azure.net/secrets/dbauth3" --rehydration-priority Standard --rehydration-duration 12 > OssRestoreFromArchiveReq.JSON

파일로 복원

권한을 할당한 스토리지 계정 내에서 컨테이너의 URI를 가져옵니다. 다음 예제에서는 다른 구독으로 명명된 스토리지 계정 아래에 명명된 testcontainerrestoretestossstorageaccount 컨테이너를 사용합니다.

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

az dataprotection backup-instance restore initialize-for-data-recovery-as-files 명령을 사용하여 모든 관련 세부 정보를 사용하여 복원 요청을 준비합니다.

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

보관 기반 복구 지점의 경우 다음 스크립트에서 다음을 수행합니다.

  • 원본 데이터 저장소를 수정합니다.
  • 리하이드레이션된 복구 지점의 리하이드레이션 우선 순위 및 보존 기간(일)을 추가합니다.
az dataprotection backup-instance restore initialize-for-data-recovery-as-files --datasource-type AzureDatabaseForPostgreSQL  --restore-___location {___location} --source-datastore ArchiveStore -target-blob-container-url $contURI --target-file-name "empdb11_postgresql-westus_1628853549768" --recovery-point-id 9da55e757af94261afa009b43cd3222a --rehydration-priority Standard --rehydration-duration 12 > OssRestoreAsFilesReq.JSON

JSON 파일이 새 리소스를 만드는 데 성공했는지 확인하려면 이 명령을 사용합니다 az dataprotection backup-instance validate-for-restore .

복원 트리거

az dataprotection backup-instance restore trigger 명령을 사용하여 이전에 준비한 요청으로 복원 작업을 트리거합니다.

az dataprotection backup-instance restore trigger -g testBkpVaultRG --vault-name TestBkpVault --backup-instance-name testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e --restore-request-object OssRestoreReq.JSON

작업 추적

명령을 사용하여 작업을 추적합니다 az dataprotection job list . 모든 작업을 나열하고 특정 작업 세부 정보를 가져올 수 있습니다.

모든 백업 보관소에서 작업을 추적하는 데 Az.ResourceGraph를 사용할 수 있습니다. az dataprotection job list-from-resourcegraph 명령을 사용하여 모든 Backup 금고에 있는 관련 작업을 가져옵니다.

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