Dela via


Återställa Azure PostgreSQL-databaser med Azure CLI

Den här artikeln beskriver hur du återställer Azure PostgreSQL-databaser till en Azure PostgreSQL-server som säkerhetskopieras av Azure Backup.

Eftersom det är en PaaS-databas stöds inte alternativet Original Location Recovery (OLR) som ska återställas genom att ersätta den befintliga databasen (varifrån säkerhetskopiorna togs). Du kan återställa från en återställningspunkt för att skapa en ny databas på samma Azure PostgreSQL-server eller i någon annan PostgreSQL-server, som kallas Alternativ platsåterställning (ALR) som hjälper till att behålla både - källdatabasen och den återställda (nya) databasen.

Här ska vi använda ett befintligt Säkerhetskopieringsvalv TestBkpVault under resursgruppen testBkpVaultRG i exemplen.

Återställa en säkerhetskopierad PostgreSQL-databas

Konfigurera behörigheter

Säkerhetskopieringsvalvet använder hanterad identitet för att få åtkomst till andra Azure-resurser. För att återställa från säkerhetskopian kräver Backup-valvets hanterade identitet en uppsättning behörigheter på Azure PostgreSQL-servern som databasen ska återställas till.

Information om hur du tilldelar relevanta behörigheter för valvets systemtilldelade hanterade identitet på PostgreSQL-målservern finns i den uppsättning behörigheter som krävs för att säkerhetskopiera Azure PostgreSQL-databasen.

För att återställa återställningspunkten som filer till ett lagringskonto behöver säkerhetskopieringsvalvets systemtilldelade hanterade identitet åtkomst till mållagringskontot.

Hämta relevant återställningspunkt

Om du vill visa en lista över alla säkerhetskopierade instanser i ett valv använder du kommandot az dataprotection backup-instance list . Hämta sedan relevant instans med kommandot az dataprotection backup-instance show . För scenarier i stor skala kan du också lista säkerhetskopieringsinstanser över valv och prenumerationer med kommandot 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
  }
.
.
.
.
.

När instansen har identifierats hämtar du den relevanta återställningspunkten med kommandot 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"
}

Om du behöver hämta återställningspunkten från arkivnivån blir typvariabeln i recoveryPointDataStoreDetails ArchiveStore.

Förbereda återställningsbegäran

Det finns olika återställningsalternativ för en PostgreSQL-databas. Du kan återställa återställningspunkten som en annan databas eller återställa som filer. Återställningspunkten kan också finnas på arkivnivå.

Återställa som databas

Skapa Azure Resource Manager-ID (ARM-ID) för den nya PostgreSQL-databasen. Du måste skapa detta med postgreSQL-målservern som behörigheter tilldelades till. Skapa också det nödvändiga PostgreSQL-databasnamnet. En PostgreSQL-databas kan till exempel namnges emprestored21 under en PostgreSQL-målserver för målservrar för målservrar i resursgrupp med en annan prenumeration.

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

Använd kommandot az dataprotection backup-instance restore initialize-for-data-recovery för att förbereda återställningsbegäran med all relevant information.

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

För en arkivbaserad återställningspunkt måste du:

  1. Extrahera från arkivdatalager till valvlager
  2. Ändra källdatalagringen
  3. Lägg till andra parametrar för att ange rehydreringsprioritet
  4. Ange hur länge den rehydrerade återställningspunkten ska behållas i valvets datalager
  5. Återställa som en databas från den här återställningspunkten

Använd följande kommando för att förbereda begäran för alla tidigare nämnda åtgärder samtidigt.

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

Återställa som filer

Hämta containerns URI (Uniform Resource Identifier) i lagringskontot som behörigheterna tilldelades till. Till exempel en container med namnet testcontainerrestore under ett lagringskonto testossstorageaccount med en annan prenumeration.

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

Använd kommandot az dataprotection backup-instance restore initialize-for-data-recovery-as-files för att förbereda återställningsbegäran med all relevant information.

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

I följande skript för arkivbaserad återställningspunkt:

  • Ändra källdatalagringen.
  • Lägg till rehydreringsprioriteten och kvarhållningstiden i dagar för den uttorkade återställningspunkten.
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

Om du vill kontrollera om JSON-filen lyckas skapa nya resurser använder du kommandot az dataprotection backup-instance validate-for-restore .

Utlös återställningen

Använd kommandot az dataprotection backup-instance restore trigger för att utlösa återställningsåtgärden med den tidigare förberedda begäran.

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

Spårningsjobb

Spåra alla jobb med kommandot az dataprotection job list . Du kan visa en lista över alla jobb och hämta en viss jobbinformation.

Du kan också använda Az.ResourceGraph för att spåra jobb i alla säkerhetskopieringsvalv. Använd kommandot az dataprotection job list-from-resourcegraph för att hämta det relevanta jobbet som finns i alla Backup-valv.

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

Nästa steg