Condividi tramite


Ripristinare i database PostgreSQL di Azure usando l'interfaccia della riga di comando di Azure

Questo articolo illustra come ripristinare database PostgreSQL di Azure in un server PostgreSQL di Azure di cui è stato eseguito il backup tramite Backup di Azure.

Essendo un database PaaS, l'opzione OLR (Original-Location Recovery) da ripristinare sostituendo il database esistente (da cui sono stati acquisiti i backup) non è supportata. È possibile eseguire il ripristino da un punto di ripristino per creare un nuovo database nello stesso server PostgreSQL di Azure o in qualsiasi altro server PostgreSQL, denominato Ripristino alternativo percorso (ALR) che consente di mantenere sia il database di origine che il database ripristinato (nuovo).

In questo caso si userà un insieme di credenziali di backup esistente TestBkpVault, nel gruppo di risorse testBkpVaultRG negli esempi.

Ripristinare un database PostgreSQL di cui è stato eseguito il backup

Impostare le autorizzazioni

L'insieme di credenziali di Backup usa un'identità gestita per accedere ad altre risorse di Azure. Per eseguire il ripristino dal backup, l'identità gestita dell'insieme di credenziali di backup richiede un set di autorizzazioni nel server PostgreSQL di Azure in cui deve essere ripristinato il database.

Per assegnare le autorizzazioni pertinenti per l'identità gestita assegnata dal sistema dell'insieme di credenziali nel server PostgreSQL di destinazione, vedere il set di autorizzazioni necessario per eseguire il backup del database PostgreSQL di Azure.

Per ripristinare il punto di ripristino come file in un account di archiviazione, l'identità gestita assegnata dal sistema dell'insieme di credenziali di Backup richiede l'accesso nell'account di archiviazione di destinazione.

Recupero del punto di ripristino pertinente

Per elencare tutte le istanze di backup all'interno di un insieme di credenziali, usare comando az dataprotection backup-instance list. Recuperare quindi l'istanza pertinente usando il comando az dataprotection backup-instance show. In alternativa, per gli scenari su larga scala, è possibile elencare le istanze di backup tra insiemi di credenziali e sottoscrizioni usando il comando 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
  }
.
.
.
.
.

Dopo aver identificato l'istanza, recuperare il punto di ripristino pertinente usando il comando 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"
}

Se è necessario recuperare il punto di ripristino dal livello archivio, il tipo di variabile in recoveryPointDataStoreDetails sarà ArchiveStore.

Preparare la richiesta di ripristino

Esistono varie opzioni di ripristino per un database PostgreSQL. È possibile ripristinare il punto di ripristino come un altro database o come file. Il punto di ripristino può anche essere a livello archivio.

Eseguire il ripristino come database

Costruire l'ID di Azure Resource Manager (ID ARM) del nuovo database PostgreSQL. È necessario crearlo con il server PostgreSQL di destinazione a cui sono state assegnate le autorizzazioni. Creare anche il nome del database PostgreSQL necessario. Ad esempio, un database PostgreSQL può essere denominato emprestored21 in un server PostgreSQL di destinazione targetossserver nel gruppo di risorse targetrg con una sottoscrizione diversa.

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

Usare il comando az dataprotection backup-instance restore initialize-for-data-recovery per preparare la richiesta di ripristino con tutti i dettagli pertinenti.

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

Per un punto di ripristino basato su archivio, è necessario:

  1. Riattivare l'archivio dati dall'archivio all'archivio dell'insieme di credenziali
  2. Modificare l'archivio dati di origine
  3. Aggiungere altri parametri per specificare la priorità di riattivazione
  4. Specificare la durata di conservazione del punto di ripristino riattivato nell'archivio dati dell'insieme di credenziali
  5. Eseguire il ripristino come database da questo punto di ripristino

Usare il comando seguente per preparare la richiesta per tutte le operazioni indicate in precedenza, contemporaneamente.

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

Ripristinare come file

Recuperare l'URI (Uniform Resource Identifier) del contenitore, all'interno dell'account di archiviazione a cui sono state assegnate le autorizzazioni. Ad esempio, un contenitore denominato testcontainerrestore in un account di archiviazione testossstorageaccount con una sottoscrizione diversa.

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

Usare il comando az dataprotection backup-instance restore initialize-for-data-recovery-as-files per preparare la richiesta di ripristino con tutti i dettagli pertinenti.

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

Per il punto di ripristino basato su archivio, nello script seguente:

  • Modificare l'archivio dati di origine.
  • Aggiungere la priorità di riattivazione e la durata di conservazione, in giorni, del punto di ripristino riattivato.
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

Per verificare se il file JSON riesce a creare nuove risorse, usare il comando az dataprotection backup-instance validate-for-restore.

Attivare il processo di ripristino

Usare il comando az dataprotection backup-instance restore trigger per attivare l'operazione di ripristino con la richiesta preparata in precedenza.

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

Tracciamento del processo

È possibile tenere traccia di tutti i processi usando il comando az dataprotection job list. È possibile elencare tutti i processi e recuperare un dettaglio specifico del processo.

È possibile anche usare Az.ResourceGraph per tenere traccia dei processi in tutti gli insiemi di credenziali di Backup. Usare il comando az dataprotection job list-from-resourcegraph per ottenere il processo pertinente in tutti gli insiemi di credenziali di backup.

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

Passaggi successivi