Compartir a través de


Copia de seguridad de bases de datos PostgreSQL mediante la CLI de Azure

En este artículo se describe cómo realizar copias de seguridad de bases de datos PostgreSQL en Azure Virtual Machines mediante la CLI de Azure. También puede configurar la copia de seguridad mediante Azure Portal, Azure PowerShell y la API REST para bases de datos postgreSQL.

Obtenga más información sobre los escenarios admitidos y las preguntas más frecuentes sobre la copia de seguridad de Azure Database for PostgreSQL.

Creación de un almacén de Backup

Un almacén de Backup es una entidad de almacenamiento en Azure. Almacena los datos de copia de seguridad de las nuevas cargas de trabajo compatibles con Azure Backup, como servidores de Azure Database for PostgreSQL, blobs en una cuenta de almacenamiento y discos de Azure. Los almacenes de Backup facilitan la tarea de organizar los datos de copia de seguridad, al mismo tiempo que reducen al mínimo la sobrecarga administrativa. Los almacenes de copias de seguridad se basan en el modelo de Azure Resource Manager de Azure, que proporciona características para proteger los datos de las copias de seguridad.

Antes de crear un almacén de copia de seguridad, elija la redundancia del almacenamiento de los datos dentro del almacén. Después, continúe con la creación del almacén de copia de seguridad con esa redundancia de almacenamiento y la ubicación.

En este artículo, creará un almacén de Backup con el nombre TestBkpVault, en la región westus, en el grupo de recursos testBkpVaultRG. Use el comando az dataprotection vault create para crear un almacén de Backup. Obtenga más información sobre cómo crear un almacén de Backup.

az dataprotection backup-vault create -g testBkpVaultRG --vault-name TestBkpVault -l westus --type SystemAssigned --storage-settings datastore-type="VaultStore" type="LocallyRedundant"

{
  "eTag": null,
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/testBkpVaultRG/providers/Microsoft.DataProtection/BackupVaults/TestBkpVault",
  "identity": {
    "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
    "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "type": "SystemAssigned"
  },
  "location": "westus",
  "name": "TestBkpVault",
  "properties": {
    "provisioningState": "Succeeded",
    "storageSettings": [
      {
        "datastoreType": "VaultStore",
        "type": "LocallyRedundant"
      }
    ]
  },
  "resourceGroup": "testBkpVaultRG",
  "systemData": null,
  "tags": null,
  "type": "Microsoft.DataProtection/backupVaults"
}

Crear una directiva de copia de seguridad

Después de crear un almacén, puede crear una directiva de copia de seguridad para ayudar a proteger las bases de datos postgreSQL. También puede crear una directiva de copia de seguridad para bases de datos postgreSQL mediante la API REST.

Descripción de la directiva de copia de seguridad de PostgreSQL

Mientras que la copia de seguridad en disco ofrece varias copias de seguridad al día y la copia de seguridad de blobs es una copia de seguridad continua sin desencadenador, la copia de seguridad de PostgreSQL ofrece protección de archivo. Los datos de copia de seguridad que se envían primero al almacén pueden trasladarse al nivel de archivo de acuerdo con una regla definida o un ciclo de vida.

En este contexto, la siguiente jerarquía puede ayudarle a comprender el objeto de directiva de copia de seguridad para PostgreSQL:

  • Regla de directivas
    • Regla de copia de seguridad
      • Parámetro de copia de seguridad
        • Tipo de copia de seguridad (una copia de seguridad completa de la base de datos en este caso)
        • Almacén de datos inicial (donde las copias de seguridad llegan inicialmente)
        • Desencadenador (cómo se desencadena la copia de seguridad)
          • Programación
          • Criterios de etiquetado predeterminados (una etiqueta predeterminada que vincula todas las copias de seguridad programadas a la regla de retención)
    • Regla de retención predeterminada (una regla que se aplica a todas las copias de seguridad, de forma predeterminada, en el almacén de datos inicial)

El objeto de directiva define con qué tipos de copias de seguridad se desencadenan, cómo se desencadenan (a través de una programación), con qué se etiquetan, dónde llegan (un almacén de datos) y el ciclo de vida de sus datos en un almacén de datos.

El objeto de PowerShell predeterminado para PostgreSQL dice que desencadena una copia de seguridad completa cada semana. Las copias de seguridad llegan al almacén, donde se almacenan durante tres meses.

Si desea agregar el nivel de archivo a la directiva, debe decidir cuándo se moverán los datos del almacén al archivo, cuánto tiempo permanecerán los datos en el archivo y cuál de las copias de seguridad programadas se deben etiquetar como archivables. Debe agregar una regla de retención que defina el ciclo de vida de los datos de copia de seguridad del almacén de datos del almacén al almacén de datos de archivo. La regla de retención también define cuánto tiempo permanecerán los datos de copia de seguridad en el almacén de datos de archivo. A continuación, debe agregar una etiqueta que marque las copias de seguridad programadas como aptas para archivarse.

El objeto de PowerShell resultante es el siguiente:

  • Regla de directivas
    • Regla de copia de seguridad
      • Parámetro de copia de seguridad
        • Tipo de copia de seguridad (una copia de seguridad completa de la base de datos en este caso)
        • Almacén de datos inicial (donde las copias de seguridad llegan inicialmente)
        • Desencadenador (cómo se desencadena la copia de seguridad)
          • Programación
          • Criterios de etiquetado predeterminados (una etiqueta predeterminada que vincula todas las copias de seguridad programadas a la regla de retención)
          • Nuevos criterios de etiquetado para la nueva regla de retención con el mismo nombre
    • Regla de retención predeterminada (una regla que se aplica a todas las copias de seguridad, de forma predeterminada, en el almacén de datos inicial)
    • Nueva regla de retención
      • Ciclo vital
        • Almacén de datos de origen
        • Período de tiempo para la eliminación en el almacén de datos de origen
        • Copia en el almacén de datos de destino

Recuperación de la plantilla de directiva

Para comprender los componentes internos de una directiva de copia de seguridad para la copia de seguridad de la base de datos de PostgreSQL, recupere la plantilla de directiva mediante el az dataprotection backup-policy get-default-policy-template comando . Este comando devuelve la plantilla de directiva predeterminada para un tipo de origen de datos. Use esta plantilla de políticas para crear una nueva política.

az dataprotection backup-policy get-default-policy-template --datasource-type AzureDatabaseForPostgreSQL
{
  "datasourceTypes": [
    "Microsoft.DBforPostgreSQL/servers/databases"
  ],
  "name": "OssPolicy1",
  "objectType": "BackupPolicy",
  "policyRules": [
    {
      "backupParameters": {
        "backupType": "Full",
        "objectType": "AzureBackupParams"
      },
      "dataStore": {
        "dataStoreType": "VaultStore",
        "objectType": "DataStoreInfoBase"
      },
      "name": "BackupWeekly",
      "objectType": "AzureBackupRule",
      "trigger": {
        "objectType": "ScheduleBasedTriggerContext",
        "schedule": {
          "repeatingTimeIntervals": [
            "R/2021-08-15T06:30:00+00:00/P1W"
          ],
          "timeZone": "UTC"
        },
        "taggingCriteria": [
          {
            "isDefault": true,
            "tagInfo": {
              "id": "Default_",
              "tagName": "Default"
            },
            "taggingPriority": 99
          }
        ]
      }
    },
    {
      "isDefault": true,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P3M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": []
        }
      ],
      "name": "Default",
      "objectType": "AzureRetentionRule"
    }
  ]
}

La plantilla de directiva consta de un desencadenador (que decide qué desencadena la copia de seguridad) y un ciclo de vida (que decide cuándo eliminar, copiar o mover la copia de seguridad). En una copia de seguridad de base de datos postgreSQL, el valor predeterminado del desencadenador es un desencadenador semanal programado (una copia de seguridad cada siete días). Cada copia de seguridad se conserva durante tres meses.

Desencadenador programado

"trigger": {
        "objectType": "ScheduleBasedTriggerContext",
        "schedule": {
          "repeatingTimeIntervals": [
            "R/2021-08-15T06:30:00+00:00/P1W"
          ],
          "timeZone": "UTC"
        }

Ciclo de vida predeterminado para la regla de detención

 {
      "isDefault": true,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P3M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": []
        }
      ],
      "name": "Default",
      "objectType": "AzureRetentionRule"
    }

Modificación de la plantilla de directiva

En Azure PowerShell, puede usar objetos como ubicaciones de almacenamiento provisional para realizar todas las modificaciones. En la CLI de Azure, debe usar archivos, ya que no hay ninguna noción de objetos. Cada operación de edición debe redirigirse a un nuevo archivo, donde el contenido se lee desde el archivo de entrada y se redirige al archivo de salida. Más adelante puede cambiar el nombre del archivo según sea necesario mientras lo usa en un script.

Modificación de la programación

La plantilla de directiva predeterminada ofrece una copia de seguridad una vez por semana. Puede modificar la programación para que la copia de seguridad se realice varios días a la semana. Para modificar la programación, use el az dataprotection backup-policy trigger set comando .

En el ejemplo siguiente se modifica la copia de seguridad semanal a domingo, miércoles y viernes de cada semana. La matriz de fechas de programación menciona las fechas, y los días de la semana para esas fechas se toman como días de la semana. También debe especificar que estas programaciones se repitan cada semana. Por lo tanto, el intervalo de programación es 1 y el tipo de intervalo es Weekly.

az dataprotection backup-policy trigger create-schedule --interval-type Weekly --interval-count 1 --schedule-days 2021-08-15T22:00:00 2021-08-18T22:00:00 2021-08-20T22:00:00
[
  "R/2021-08-15T22:00:00+00:00/P1W",
  "R/2021-08-18T22:00:00+00:00/P1W",
  "R/2021-08-20T22:00:00+00:00/P1W"
]

az dataprotection backup-policy trigger set --policy .\OSSPolicy.json  --schedule R/2021-08-15T22:00:00+00:00/P1W R/2021-08-18T22:00:00+00:00/P1W R/2021-08-20T22:00:00+00:00/P1W > EditedOSSPolicy.json

Adición de una nueva regla de retención

Si desea agregar protección de archivo, debe modificar la plantilla de directiva.

La plantilla predeterminada tiene un ciclo de vida para el almacén de datos inicial en la regla de retención predeterminada. En este escenario, la regla indica que se eliminarán los datos de copia de seguridad después de tres meses. Debe agregar una nueva regla de retención que defina cuándo se mueven los datos al almacén de datos de archivo. Es decir, los datos de copia de seguridad se copian primero en el almacén de datos de archivo y luego se eliminan en el almacén de datos del almacén.

Además, la regla debe definir cuánto tiempo se conservan los datos en el almacén de datos de archivo. Para crear nuevos ciclos de vida, use el az dataprotection backup-policy retention-rule create-lifecycle comando . Para asociar esos ciclos de vida a reglas nuevas o existentes, use el az dataprotection backup-policy retention-rule set comando .

En el ejemplo siguiente se crea una nueva regla de retención denominada Monthly. En esta regla, la primera copia de seguridad correcta de cada mes se conserva en el almacén durante seis meses, se mueve al nivel de archivo y se mantiene en el nivel de archivo durante 24 meses.

az dataprotection backup-policy retention-rule create-lifecycle --retention-duration-count 6 --retention-duration-type Months --source-datastore VaultStore --target-datastore ArchiveStore --copy-option CopyOnExpiryOption > VaultToArchiveLifeCycle.JSON

az dataprotection backup-policy retention-rule create-lifecycle --retention-duration-count 24 --retention-duration-type Months -source-datastore ArchiveStore > OnArchiveLifeCycle.JSON

az dataprotection backup-policy retention-rule set --lifecycles .\VaultToArchiveLifeCycle.JSON .\OnArchiveLifeCycle.JSON --name Monthly --policy .\EditedOSSPolicy.JSON > AddedRetentionRulePolicy.JSON

Agregue una etiqueta y los criterios pertinentes

Después de crear una regla de retención, debe crear una etiqueta correspondiente en la Trigger propiedad de la directiva de copia de seguridad. Para crear nuevos criterios de etiquetado, use el az dataprotection backup-policy tag create-absolute-criteria comando . Para actualizar la etiqueta existente o crear una nueva etiqueta, use el az dataprotection backup-policy tag set comando .

En el siguiente ejemplo se crea una nueva etiqueta junto con los criterios, que es la primera copia de seguridad correcta del mes. La etiqueta tiene el mismo nombre que la regla de retención correspondiente que se aplicará.

En este ejemplo, los criterios de etiqueta se denominan Monthly:

az dataprotection backup-policy tag create-absolute-criteria --absolute-criteria FirstOfMonth > tagCriteria.JSON
az dataprotection backup-policy tag set --criteria .\tagCriteria.JSON --name Monthly --policy .\AddedRetentionRulePolicy.JSON > AddedRetentionRuleAndTag.JSON

Si la programación es de varias copias de seguridad por semana (todos los domingos, miércoles y jueves, como se especifica en el ejemplo anterior) y desea archivar las copias de seguridad de domingo y jueves, puede cambiar los criterios de etiquetado mediante el comando az dataprotection backup-policy tag create-generic-criteria.

az dataprotection backup-policy tag create-generic-criteria --days-of-week Sunday Friday > tagCriteria.JSON
az dataprotection backup-policy tag set --criteria .\tagCriteria.JSON --name Monthly --policy .\AddedRetentionRulePolicy.JSON > AddedRetentionRuleAndTag.JSON

Creación de una nueva directiva de copia de seguridad de PostgreSQL

Después de modificar la plantilla según los requisitos, use el az dataprotection backup-policy create comando para crear una directiva mediante la plantilla modificada:

az dataprotection backup-policy create --backup-policy-name FinalOSSPolicy --policy AddedRetentionRuleAndTag.JSON --resource-group testBkpVaultRG --vault-name TestBkpVault

Configuración de la copia de seguridad

Después de crear la bóveda y la directiva, debe considerar tres puntos críticos para realizar una copia de seguridad de una base de datos PostgreSQL en Azure Database for PostgreSQL.

Descripción de las entidades clave

Base de datos PostgreSQL de la que hacer copia de seguridad

Obtener el ID del Resource Manager de la base de datos PostgreSQL de la que se va a realizar una copia de seguridad. Este identificador actúa como identificador de la base de datos. En el ejemplo siguiente se usa una base de datos denominada empdb11 bajo el servidor testposgresqlpostgreSQL , que está presente en el grupo ossrg de recursos en una suscripción diferente. En el ejemplo se usa Bash.

ossId="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourcegroups/ossrg/providers/Microsoft.DBforPostgreSQL/servers/archive-postgresql-ccy/databases/empdb11"

Almacén de claves

El servicio Azure Backup no almacena el nombre de usuario y la contraseña para conectarse a la base de datos de PostgreSQL. En su lugar, el administrador de copia de seguridad inicializa las claves en el almacén de claves. A continuación, el servicio Azure Backup accede al almacén de claves, lee las claves y accede a la base de datos.

En el ejemplo siguiente se usa Bash. Anote el identificador secreto de la clave pertinente.

keyURI="https://testkeyvaulteus.vault.azure.net/secrets/ossdbkey"

Almacén de Backup

Un almacén de Backup tiene que conectarse al servidor de PostgreSQL y, a continuación, acceder a la base de datos a través de las claves presentes en el almacén de claves. Por lo tanto, el almacén de Backup requiere acceso al servidor postgreSQL y al almacén de claves. Se concede acceso a la identidad administrada del almacén de Backup.

Obtenga información sobre los permisos que debe conceder a la identidad administrada del almacén de Backup en el servidor postgreSQL y el almacén de claves que almacena las claves en la base de datos.

Preparación de la solicitud

Después de establecer todos los permisos pertinentes, realice la configuración de la copia de seguridad en dos pasos:

  1. Prepare la solicitud mediante el almacén, la directiva y la base de datos de PostgreSQL pertinentes en el comando az dataprotection backup-instance initialize.
  2. Envíe la solicitud para realizar una copia de seguridad de la base de datos mediante el az dataprotection backup-instance create comando .
az dataprotection backup-instance initialize --datasource-id $ossId --datasource-type AzureDatabaseForPostgreSQL -l <vault-location> --policy-id <policy_arm_id>  --secret-store-type AzureKeyVault --secret-store-uri $keyURI > OSSBkpInstance.JSON

az dataprotection backup-instance create --resource-group testBkpVaultRG --vault-name TestBkpVault TestBkpvault --backup-instance .\OSSBkpInstance.JSON

Ejecución de una copia de seguridad a petición

Debe especificar una regla de retención mientras desencadena la copia de seguridad. Para ver las reglas de retención en una directiva, examine el archivo JSON de directiva. En el ejemplo siguiente, hay dos reglas de retención con los nombres Default y Monthly. En este artículo se usa la Monthly regla para la copia de seguridad a petición.

az dataprotection backup-policy show  -g ossdemorg --vault-name ossdemovault-1 --subscription e3d2d341-4ddb-4c5d-9121-69b7e719485e --name osspol5
{
  "id": "/subscriptions/e3d2d341-4ddb-4c5d-9121-69b7e719485e/resourceGroups/ossdemorg/providers/Microsoft.DataProtection/backupVaults/ossdemovault-1/backupPolicies/osspol5",
  "name": "osspol5",
  "properties": {
    "datasourceTypes": [
      "Microsoft.DBforPostgreSQL/servers/databases"
    ],
    "objectType": "BackupPolicy",
    "policyRules": [
      {
        "backupParameters": {
          "backupType": "Full",
          "objectType": "AzureBackupParams"
        },
        "dataStore": {
          "dataStoreType": "VaultStore",
          "objectType": "DataStoreInfoBase"
        },
        "name": "BackupWeekly",
        "objectType": "AzureBackupRule",
        "trigger": {
          "objectType": "ScheduleBasedTriggerContext",
          "schedule": {
            "repeatingTimeIntervals": [
              "R/2020-04-04T20:00:00+00:00/P1W",
              "R/2020-04-01T20:00:00+00:00/P1W"
            ],
            "timeZone": "UTC"
          },
          "taggingCriteria": [
            {
              "criteria": [
                {
                  "absoluteCriteria": [
                    "FirstOfMonth"
                  ],
                  "daysOfMonth": null,
                  "daysOfTheWeek": null,
                  "monthsOfYear": null,
                  "objectType": "ScheduleBasedBackupCriteria",
                  "scheduleTimes": null,
                  "weeksOfTheMonth": null
                }
              ],
              "isDefault": false,
              "tagInfo": {
                "eTag": null,
                "id": "Monthly_",
                "tagName": "Monthly"
              },
              "taggingPriority": 15
            },
            {
              "criteria": null,
              "isDefault": true,
              "tagInfo": {
                "eTag": null,
                "id": "Default_",
                "tagName": "Default"
              },
              "taggingPriority": 99
            }
          ]
        }
      },
      {
        "isDefault": false,
        "lifecycles": [
          {
            "deleteAfter": {
              "duration": "P10Y",
              "objectType": "AbsoluteDeleteOption"
            },
            "sourceDataStore": {
              "dataStoreType": "VaultStore",
              "objectType": "DataStoreInfoBase"
            },
            "targetDataStoreCopySettings": []
          }
        ],
        "name": "Monthly",
        "objectType": "AzureRetentionRule"
      },
      {
        "isDefault": true,
        "lifecycles": [
          {
            "deleteAfter": {
              "duration": "P1Y",
              "objectType": "AbsoluteDeleteOption"
            },
            "sourceDataStore": {
              "dataStoreType": "VaultStore",
              "objectType": "DataStoreInfoBase"
            },
            "targetDataStoreCopySettings": []
          }
        ],
        "name": "Default",
        "objectType": "AzureRetentionRule"
      }
    ]
  },
  "resourceGroup": "ossdemorg",
  "systemData": null,
  "type": "Microsoft.DataProtection/backupVaults/backupPolicies"
}

Para desencadenar una copia de seguridad a petición, use el az dataprotection backup-instance adhoc-backup comando :

az dataprotection backup-instance adhoc-backup --name "ossrg-empdb11" --rule-name "Monthly" --resource-group testBkpVaultRG --vault-name TestBkpVault

Seguimiento de trabajos

Realice un seguimiento de todos 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 un seguimiento de todos los trabajos en todos los almacenes de Backup. Use el comando az dataprotection job list-from-resourcegraph para capturar los trabajos pertinentes en los almacenes de Backup:

az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --status Completed