Compartir a través de


Restauración de Azure Database for PostgreSQL: servidores flexibles mediante la CLI de Azure (versión preliminar)

En este artículo se explica cómo restaurar un servidor flexible de Azure Database for PostgreSQL en un servidor flexible de Azure Database for PostgreSQL con copia de seguridad de Azure Backup.

Aquí, vamos a usar un almacén de copias de seguridad existente TestBkpVault bajo el grupo de recursos testBkpVaultRG en los ejemplos.

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

Configuración de permisos

El almacén de Backup usa la identidad administrada para obtener acceso a otros recursos de Azure. Para restaurar desde la copia de seguridad, la identidad administrada del almacén de Backup requiere un conjunto de permisos en la cuenta de almacenamiento a la que se restauraría el servidor. A la identidad administrada se le debe asignar un rol Colaborador de datos de Blob Storage a través de la cuenta de almacenamiento.

Captura del punto de recuperación pertinente

Para enumerar todas las instancias de copia de seguridad en un almacén, use el comando az data protection backup-instance list. Después, capture la instancia pertinente con el comando az data protection backup-instance show. Como alternativa, para escenarios a gran escala, puede enumerar las instancias de copia de seguridad entre almacenes y suscripciones mediante el comando az dataprotection backup-instance list-from-resourcegraph.

az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQLFlexibleServer -subscriptions 00001111-aaaa-2222-bbbb-3333cccc4444

  {
    "datasourceId": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpgflex",
    "extendedLocation": null,
    "id": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149",
    "identity": null,
    "kind": "",
    "location": "",
    "managedBy": "",
    "name": "testpgflex-957d23b1-c679-4c94-ade6-c4d34635e149",
    "plan": null,
    "properties": {
      "currentProtectionState": "ProtectionConfigured",
      "dataSourceInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "objectType": "Datasource",
        "resourceID": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpgflex",
        "resourceLocation": "westus",
        "resourceName": "postgres",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "resourceUri": ""
      },
      "dataSourceProperties": null,
      "dataSourceSetInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "objectType": "DatasourceSet",
        "resourceID": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpgflex",
        "resourceLocation": "westus",
        "resourceName": "testpgflex",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "resourceUri": ""
      },
      "friendlyName": "testpgflex",
      "objectType": "BackupInstance",
      "policyInfo": {
        "policyId": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/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": bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f,
    "tags": null,
    "tenantId": aaaabbbb-0000-cccc-1111-dddd2222eeee,
    "type": "microsoft.dataprotection/backupvaults/backupinstances",
    "vaultName": "testBkpVault",
    "zones": null
  }
.
.
.
.
.

Una vez identificada la instancia, capture el punto de recuperación correspondiente mediante el comando az data protection recovery-point list.

az dataprotection recovery-point list --backup-instance-name testpgflex-957d23b1-c679-4c94-ade6-c4d34635e149 -g testBkpVaultRG --vault-name TestBkpVault

{
  "id": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpgflex-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"
}

Preparación de la solicitud de restauración

Puede restaurar el punto de recuperación de una base de datos de servidor flexible de PostgreSQL como solo archivos.

Restaurar como archivos

Recupere el identificador uniforme de recursos (URI) del contenedor, en la cuenta de almacenamiento a la que se le asignaron permisos. Por ejemplo, un contenedor denominado testcontainer restore en una cuenta de almacenamiento testossstorageaccount con una suscripción diferente.

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

Use el comando az data protection backup-instance restore initialize-for-data-recovery-as-filespara preparar la solicitud de restauración con todos los detalles pertinentes.

az dataprotection backup-instance restore initialize-for-data-recovery-as-files --datasource-type AzureDatabaseForPostgreSQLFlexibleServer  --restore-location {location} --source-datastore VaultStore -target-blob-container-url $contURI --recovery-point-id 9da55e757af94261afa009b43cd3222a > OssRestoreAsFilesReq.JSON

Para validar si el archivo JSON se realiza correctamente para crear nuevos recursos, use el comando az data protection backup-instance validate-for-restore.

Desencadenamiento de la restauración

Use el comando az data protection backup-instance restore trigger 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 testpgflex-957d23b1-c679-4c94-ade6-c4d34635e149 --restore-request-object OssRestoreReq.JSON

Seguimiento de trabajos

Realice un seguimiento de todos los trabajos mediante el comando az data protection job list. 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 data protection 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 AzureDatabaseForPostgreSQLFlexibleServer --operation Restore

Creación de un servidor flexible a partir de una cuenta de almacenamiento restaurada

Una vez finalizada la restauración en la cuenta de almacenamiento de destino, puede utilizar la utilidad pg_restore para restaurar una base de datos de servidor flexible Azure Database para PostgreSQL desde el destino. Use el siguiente comando para conectarse a un servidor flexible de PostgreSQL existente y a una base de datos existente.

pg_restore -h <hostname> -U <username> -d <db name> -Fd -j <NUM> -C <dump directory>

-Fd: formato de directorio. -j: número de trabajos. -C: comience la salida con un comando para crear la propia base de datos y volver a ella.

Este es un ejemplo de cómo puede ser esta sintaxis:

pg_restore -h <hostname> -U <username> -j <Num of parallel jobs> -Fd -C -d <databasename> sampledb_dir_format

Si tiene más de una base de datos para restaurarla, vuelva a ejecutar el comando anterior para cada base de datos.

Además, con varios trabajos simultáneos-j, puede reducir el tiempo de restauración de una base de datos grande en un servidor de destino de varios núcleos virtuales. El número de trabajos puede ser igual o menor que el número de vCPU asignadas al servidor de destino.

Pasos siguientes