Przywracanie baz danych Usługi 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 Azure Backup.

Będąc bazą danych PaaS, opcja odzyskiwania oryginalnej lokalizacji (OLR) do przywrócenia przez zastąpienie istniejącej bazy danych (z miejsca, w 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. Jest to nazywane Alternate-Location Recovery (ALR), które pomaga zachować zarówno źródłową bazę danych, jak i przywróconą (nową) bazę danych.

Ten artykuł obejmuje następujące zagadnienia:

  • Przywracanie w celu utworzenia nowej bazy danych PostgreSQL

  • Śledzenie stanu operacji przywracania

W przykładach odwołujemy się do istniejącego magazynu kopii zapasowych TestBkpVault w ramach testu grupy zasobówBkpVaultRG .

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 za pomocą polecenia az dataprotection backup-instance show . Alternatywnie w przypadku scenariuszy na dużą skalę można wyświetlić listę wystąpień kopii zapasowych między magazynami i subskrypcjami 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 za pomocą 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 obiekcie recoveryPointDataStoreDetails będzie archiveStore.

Przygotowywanie żądania przywrócenia

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 być również w warstwie archiwum.

Przywracanie jako baza danych

Skonstruuj identyfikator usługi Azure Resource Manager (IDENTYFIKATOR ARM) nowej bazy danych PostgreSQL. Należy to utworzyć 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 elementy:

  1. Ponowne wypełnianie z archiwum magazynu danych do magazynu magazynów
  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 punkt odzyskiwania ponownego wypełniania ma być zachowywany w magazynie danych magazynu
  5. Przywracanie jako baza 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 skryscie:

  • Zmodyfikuj źródłowy magazyn danych.
  • Dodaj priorytet ponownego wypełniania i czas trwania przechowywania w dniach ponownego wypełniania punktu odzyskiwania.
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 powiedzie się, aby utworzyć nowe zasoby, 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 przy użyciu 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 kopii zapasowych. 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