Compartir a través de


Restauración de bases de datos postgreSQL mediante la CLI de Azure

En este artículo se describe cómo usar la CLI de Azure para restaurar bases de datos de PostgreSQL en un servidor de Azure Database for PostgreSQL que respaldó a través de Azure Backup. También puede restaurar una base de datos postgreSQL mediante Azure Portal, Azure PowerShell y la API REST.

Dado que una base de datos PostgreSQL es una base de datos de plataforma como servicio (PaaS), no se admite la opción de recuperación de Original-Location (OLR) para restaurar reemplazando la base de datos existente (desde donde se realizaron las copias de seguridad). Puede restaurar desde un punto de recuperación para crear una nueva base de datos en el mismo servidor de Azure Database for PostgreSQL o en cualquier otro servidor de PostgreSQL. Esta opción se denomina Recuperación alternativa de ubicación (ALR). ALR ayuda a mantener la base de datos de origen y la base de datos restaurada (nueva).

Los ejemplos de este artículo hacen referencia a un almacén de Backup existente denominado TestBkpVault en el grupo testBkpVaultRGde recursos .

Restauración de una base de datos de PostgreSQL de la que se ha hecho una copia de seguridad

Configuración de permisos

Un almacén de Backup usa una identidad administrada para acceder a otros recursos de Azure. Para restaurar desde una copia de seguridad, la identidad administrada del almacén de Backup requiere un conjunto de permisos en el servidor de Azure Database for PostgreSQL al que se debe restaurar la base de datos.

Para asignar los permisos pertinentes para la identidad administrada asignada por el sistema de un almacén en el servidor PostgreSQL de destino, consulte el Conjunto de permisos necesarios para realizar una copia de seguridad de una base de datos PostgreSQL.

Para restaurar el punto de recuperación como archivos en una cuenta de almacenamiento, la identidad administrada asignada por el sistema del almacén de Backup necesita acceso a la cuenta de almacenamiento de destino.

Captura del punto de recuperación pertinente

Para enumerar todas las instancias de copia de seguridad dentro de un almacén, use el comando az dataprotection backup-instance list. A continuación, capture la instancia pertinente mediante el az dataprotection backup-instance show comando .

Como alternativa, para escenarios a escala, puede enumerar instancias de copia de seguridad a través de diferentes almacenes y suscripciones mediante el 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
  }
.
.
.
.
.

Después de identificar la instancia, capture el punto de recuperación correspondiente mediante el az dataprotection recovery-point list comando :

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

Si necesita capturar el punto de recuperación del nivel de archivo, la type variable de recoveryPointDataStoreDetails es ArchiveStore.

Preparación de la solicitud de restauración

Hay varias opciones de restauración para una base de datos de PostgreSQL. Puede restaurar el punto de recuperación como otra base de datos o restaurar como archivos. El punto de recuperación también puede estar en el nivel de archivo.

Restaurar como una base de datos

Construya el identificador de Azure Resource Manager de la nueva base de datos postgreSQL mediante el servidor postgreSQL de destino al que asignó permisos. Asimismo, construya el nombre de base de datos de PostgreSQL necesario. Por ejemplo, una base de datos postgreSQL se puede denominar emprestored21 en un servidor de PostgreSQL de destino denominado targetossserver en el grupo targetrg de recursos con una suscripción diferente:

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

Use el az dataprotection backup-instance restore initialize-for-data-recovery comando para preparar la solicitud de restauración con todos los detalles pertinentes:

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

Para un punto de recuperación basado en archivo, debe:

  1. Rehidratación del almacén de datos de archivo al almacén de datos del almacén.
  2. Modificar el almacén de datos de origen.
  3. Agregar otros parámetros para especificar la prioridad de rehidratación.
  4. Especifique la duración para la que se debe conservar el punto de recuperación rehidratado en el almacén de datos.
  5. Restaurar como base de datos desde este punto de recuperación.

Use el siguiente comando para preparar la solicitud de todas las operaciones mencionadas anteriormente a la vez:

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

Restaurar como archivos

Capture el URI del contenedor dentro de la cuenta de almacenamiento a la que asignó permisos. En el ejemplo siguiente se usa un contenedor denominado testcontainerrestore en una cuenta de almacenamiento denominada testossstorageaccount con una suscripción diferente:

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

Use el az dataprotection backup-instance restore initialize-for-data-recovery-as-files comando para preparar la solicitud de restauración con todos los detalles pertinentes:

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

Para el punto de recuperación basado en el archivo, en el siguiente script:

  • Modificar el almacén de datos de origen.
  • Agregue la prioridad de rehidratación y la duración de la retención, en días, del punto de recuperación rehidratado.
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

Para validar si el archivo JSON tendrá éxito al crear nuevos recursos, use el comando az dataprotection backup-instance validate-for-restore.

Desencadenamiento de la restauración

Use el az dataprotection backup-instance restore trigger comando para desencadenar la operación de restauración con la solicitud preparada anteriormente:

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

Seguimiento de trabajos

Realice un seguimiento de los trabajos mediante el az dataprotection job list comando . Puede enumerar todos los trabajos y capturar un detalle de trabajo determinado.

También puede usar Az.ResourceGraph para realizar el seguimiento de los trabajos en todos los almacenes de copias de seguridad. Use el comando az dataprotection job list-from-resourcegraph para obtener el trabajo pertinente que se encuentra en todos los almacenes de Backup:

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