Udostępnij za pośrednictwem


Przywracanie baz danych Azure PostgreSQL przy użyciu interfejsu wiersza polecenia platformy Azure

W tym artykule wyjaśniono, jak przywrócić bazy danych Usługi Azure PostgreSQL do serwera Usługi Azure PostgreSQL utworzonego przez usługę Azure Backup.

Będąc bazą danych PaaS, opcja odzyskiwania oryginalnej lokalizacji (OLR) umożliwiająca przywrócenie przez zastąpienie istniejącej bazy danych (z której zostały wykonane kopie zapasowe) nie jest obsługiwana. Możesz przywrócić z punktu odzyskiwania, aby utworzyć nową bazę danych na tym samym serwerze usługi Azure PostgreSQL lub na dowolnym innym serwerze PostgreSQL, nazywanym odzyskiwaniem alternatywnej lokalizacji (ALR), który pomaga zachować zarówno źródłową bazę danych, jak i przywróconą (nową) bazę danych.

W tym miejscu użyjemy istniejącego magazynu kopii zapasowej TestBkpVault w ramach grupy zasobów testBkpVaultRG w przykładach.

Przywracanie kopii zapasowej bazy danych PostgreSQL

Konfigurowanie uprawnień

Magazyn kopii zapasowych używa tożsamości zarządzanej do uzyskiwania dostępu do innych zasobów platformy Azure. Aby przywrócić kopię zapasową, tożsamość zarządzana magazynu kopii zapasowych wymaga zestawu uprawnień na serwerze usługi Azure PostgreSQL, do którego ma zostać przywrócona baza danych.

Aby przypisać odpowiednie uprawnienia dla przypisanej przez system tożsamości zarządzanej magazynu na docelowym serwerze PostgreSQL, zobacz zestaw uprawnień wymaganych do tworzenia kopii zapasowej bazy danych Azure PostgreSQL.

Aby przywrócić punkt odzyskiwania jako pliki do konta magazynu, tożsamość zarządzana przypisana przez system magazynu kopii zapasowych wymaga dostępu na docelowym koncie magazynu.

Pobieranie odpowiedniego punktu odzyskiwania

Aby wyświetlić listę wszystkich wystąpień kopii zapasowych w magazynie, użyj polecenia az dataprotection backup-instance list . Następnie pobierz odpowiednie wystąpienie przy użyciu polecenia az dataprotection backup-instance show . Alternatywnie w przypadku scenariuszy na dużą skalę można wyświetlić listę wystąpień kopii zapasowych w magazynach i subskrypcjach przy użyciu polecenia 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-957d23b1-c679-4c94-ade6-c4d34635e149",
    "identity": null,
    "kind": "",
    "location": "",
    "managedBy": "",
    "name": "testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149",
    "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
  }
.
.
.
.
.

Po zidentyfikowaniu wystąpienia pobierz odpowiedni punkt odzyskiwania przy użyciu polecenia az dataprotection recovery-point list .

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

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

Jeśli musisz pobrać punkt odzyskiwania z warstwy archiwum, zmienna typu w magazynie danych programu recoveryPointDataStoreDetails będzie mieć wartość ArchiveStore.

Przygotowywanie żądania przywracania

Istnieją różne opcje przywracania bazy danych PostgreSQL. Punkt odzyskiwania można przywrócić jako inną bazę danych lub przywrócić jako pliki. Punkt odzyskiwania może również znajdować się w warstwie Archiwum.

Przywracanie jako baza danych

Skonstruuj identyfikator usługi Azure Resource Manager (ARM) nowej bazy danych PostgreSQL. Należy utworzyć to za pomocą docelowego serwera PostgreSQL, do którego przypisano uprawnienia. Ponadto skonstruuj wymaganą nazwę bazy danych PostgreSQL. Na przykład baza danych PostgreSQL może mieć nazwę emprestored21 w ramach docelowego serwera PostgreSQL targetossserver w grupie zasobów targetrg z inną subskrypcją.

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

Użyj polecenia az dataprotection backup-instance restore initialize-for-data-recovery, aby przygotować żądanie przywracania ze wszystkimi odpowiednimi szczegółami.

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

W przypadku punktu odzyskiwania opartego na archiwum należy wykonać następujące kroki:

  1. Ponowne wypełnianie z archiwum magazynu danych do magazynu
  2. Modyfikowanie źródłowego magazynu danych
  3. Dodawanie innych parametrów w celu określenia priorytetu ponownego wypełniania
  4. Określ czas trwania, dla którego ma zostać zachowany punkt odzyskiwania ponownie w magazynie danych magazynu
  5. Przywracanie jako bazy danych z tego punktu odzyskiwania

Użyj następującego polecenia, aby przygotować żądanie dla wszystkich poprzednich operacji jednocześnie.

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

Przywracanie jako pliki

Pobierz identyfikator URI (Uniform Resource Identifier) kontenera na koncie magazynu, do którego przypisano uprawnienia. Na przykład kontener o nazwie testcontainerrestore w ramach konta magazynu testossstorageaccount z inną subskrypcją.

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

Użyj polecenia az dataprotection backup-instance restore initialize-for-data-recovery-as-files, aby przygotować żądanie przywracania ze wszystkimi odpowiednimi szczegółami.

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

W przypadku punktu odzyskiwania opartego na archiwum w następującym skry skryptzie:

  • Zmodyfikuj źródłowy magazyn danych.
  • Dodaj priorytet ponownego wypełniania i czas trwania przechowywania w dniach punktu odzyskiwania z ponownym wypełnianiem.
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

Aby sprawdzić, czy plik JSON zakończy się powodzeniem w celu utworzenia nowych zasobów, użyj polecenia az dataprotection backup-instance validate-for-restore .

Wyzwalanie przywracania

Użyj polecenia az dataprotection backup-instance restore trigger, aby wyzwolić operację przywracania z wcześniej przygotowanym żądaniem.

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

Zadanie śledzenia

Śledź wszystkie zadania za pomocą polecenia az dataprotection job list . Możesz wyświetlić listę wszystkich zadań i pobrać szczegóły określonego zadania.

Możesz również użyć narzędzia Az.ResourceGraph do śledzenia zadań we wszystkich magazynach usługi Backup. Użyj polecenia az dataprotection job list-from-resourcegraph, aby uzyskać odpowiednie zadanie, które znajduje się we wszystkich magazynach usługi Backup.

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

Następne kroki