Dela via


Återställa PostgreSQL-databaser med hjälp av Azure CLI

Den här artikeln beskriver hur du använder Azure CLI för att återställa PostgreSQL-databaser till en Azure Database for PostgreSQL-server som du säkerhetskopierade via Azure Backup. Du kan också återställa en PostgreSQL-databas med hjälp av Azure-portalen, Azure PowerShell och REST API.

Eftersom en PostgreSQL-databas är en PaaS-databas (plattform som en tjänst) stöds inte alternativet Original-Location Recovery (OLR) för återställning 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 i samma Azure Database for PostgreSQL-server eller på någon annan PostgreSQL-server. Det här alternativet kallas Alternate-Location Recovery (ALR). ALR hjälper till att behålla både källdatabasen och den återställda (nya) databasen.

Exemplen i den här artikeln refererar till ett befintligt Säkerhetskopieringsvalv med namnet TestBkpVault under resursgruppen testBkpVaultRG.

Återställa en säkerhetskopierad PostgreSQL-databas

Konfigurera behörigheter

Ett Säkerhetskopieringsvalv använder en hanterad identitet för att komma åt andra Azure-resurser. För att återställa från en säkerhetskopia kräver säkerhetskopieringsvalvets hanterade identitet en uppsättning behörigheter på Azure Database for PostgreSQL-servern som databasen ska återställas till.

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

För att återställa återställningspunkten som filer till ett lagringskonto behöver den systemtilldelade hanterade identiteten hos säkerhetskopieringsvalvet ha åtkomst till mållagringskontot.

Hämta relevant återställningspunkt

Om du vill visa en lista över alla säkerhetskopieringsinstanser i ett valv använder du kommandot az dataprotection backup-instance list. Hämta sedan den relevanta instansen med hjälp av az dataprotection backup-instance show kommandot.

För storskaliga scenarier kan du också lista säkerhetskopieringsinstanser över valv och prenumerationer genom att använda az dataprotection backup-instance list-from-resourcegraph kommandot:

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
  }
.
.
.
.
.

När du har identifierat instansen hämtar du den relevanta återställningspunkten med hjälp az dataprotection recovery-point list av kommandot :

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"
}

Om du behöver hämta återställningspunkten från arkivnivån är variabeln type i recoveryPointDataStoreDetailsArchiveStore.

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ån.

Återställa som en databas

Skapa Azure Resource Manager-ID:t för den nya PostgreSQL-databasen med hjälp av postgreSQL-målservern som du har tilldelat behörigheter till. Skapa också det nödvändiga PostgreSQL-databasnamnet. En PostgreSQL-databas kan till exempel namnges emprestored21 under en PostgreSQL-målserver med namnet targetossserver i resursgruppen targetrg med en annan prenumeration:

$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 Använd kommandot 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 arkivdatalagringen till valvets datalager.
  2. Ändra källdatalagringen.
  3. Lägg till andra parametrar för att ange rehydreringsprioriteten.
  4. Ange varaktigheten för vilken den rehydrerade återställningspunkten ska behållas i valvets datalagringsutrymme.
  5. Återställ 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 URI:n för containern i lagringskontot som du har tilldelat behörigheter till. I följande exempel används en container med namnet testcontainerrestore under ett lagringskonto med namnet testossstorageaccount med en annan prenumeration:

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

az dataprotection backup-instance restore initialize-for-data-recovery-as-files Använd kommandot 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

För den arkivbaserade återställningspunkten i följande skript:

  • Ändra källdatalagringen.
  • Lägg till rehydreringsprioriteten och kvarhållningstiden i dagar för den rehydrerade å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 az dataprotection backup-instance validate-for-restore kommandot .

Utlös återställningen

az dataprotection backup-instance restore trigger Använd kommandot 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-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e --restore-request-object OssRestoreReq.JSON

Spåra arbeten

Spåra jobb genom att använda az dataprotection job list-kommandot. 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 backupvalv. az dataprotection job list-from-resourcegraph Använd kommandot för att hämta det relevanta jobbet som finns i alla Säkerhetskopieringsvalv:

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