Compartilhar via


Fazer backup de bancos de dados PostgreSQL usando a CLI do Azure

Este artigo descreve como fazer backup de bancos de dados PostgreSQL em Máquinas Virtuais do Azure usando a CLI do Azure. Você também pode configurar o backup usando o portal do Azure, o Azure PowerShell e a API REST para bancos de dados PostgreSQL.

Saiba mais sobre os cenários com suporte e perguntas frequentes sobre como fazer backup do Banco de Dados do Azure para PostgreSQL.

Criar um cofre de backup

Um cofre de backup é uma entidade de armazenamento no Azure. Ele armazena os dados de backup de novas cargas de trabalho com suporte do Backup do Azure, como servidores do Banco de Dados do Azure para PostgreSQL, blobs em uma conta de armazenamento e discos do Azure. Os cofres de Backup ajudam a organização dos dados de backup, minimizando a sobrecarga de gerenciamento. Os cofres de backup são baseados no modelo de Azure Resource Manager do Azure, que fornece recursos avançados para ajudar a proteger os dados de backup.

Para criar um cofre de backup, escolha a redundância de armazenamento dos dados no cofre. Depois, crie o cofre de backup com a redundância de armazenamento desejada e a localização específica.

Neste artigo, você criará um cofre de Backup com o nome TestBkpVault, na westus região, no grupo de recursos testBkpVaultRG. Use o az dataprotection vault create comando para criar um cofre de Backup. Saiba mais sobre como criar um cofre 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"
}

Criar uma política de backup

Depois de criar um cofre, você pode criar uma política de backup para ajudar a proteger bancos de dados PostgreSQL. Você também pode criar uma política de backup para bancos de dados PostgreSQL usando a API REST.

Entender a política de backup do PostgreSQL

Enquanto o backup em disco oferece vários backups por dia e o backup de blobs é um backup contínuo sem gatilho, o backup do PostgreSQL oferece proteção de arquivo. Os dados de backup que são enviados primeiro para o cofre podem ser movidos para a camada de arquivamento de acordo com uma regra definida ou um ciclo de vida.

Nesse contexto, a hierarquia a seguir pode ajudá-lo a entender o objeto de política de backup do PostgreSQL:

  • Regra de política
    • Regra de backup
      • Parâmetro de backup
        • Tipo de backup (um backup de banco de dados completo nesse caso)
        • Armazenamento de dados inicial (em que os backups chegam inicialmente)
        • Gatilho (como o backup é acionado)
          • Cronograma
          • Critérios de marcação padrão (uma marca padrão que vincula todos os backups agendados à regra de retenção)
    • Regra de retenção padrão (uma regra que é aplicada a todos os backups, por padrão, no armazenamento de dados inicial)

O objeto de política define quais tipos de backups são acionados, como são acionados (por meio de um agendamento), com o que são marcados, onde são armazenados (um armazenamento de dados) e o ciclo de vida de seus dados em um armazenamento de dados.

O objeto padrão do PowerShell para PostgreSQL diz para acionar um backup completo toda semana. Os backups chegam ao cofre, onde ficam armazenados por três meses.

Se você quiser adicionar a camada de arquivo morto à política, será necessário decidir quando os dados serão movidos do cofre para o arquivo morto, por quanto tempo os dados permanecerão no arquivo morto e quais dos backups agendados devem ser marcados como arquiváveis. Você precisa adicionar uma regra de retenção que defina o ciclo de vida dos dados de backup do armazenamento de dados do cofre para o armazenamento de dados de arquivamento. A regra de retenção também define por quanto tempo os dados de backup permanecerão no armazenamento de dados de arquivos. Em seguida, você precisa adicionar uma marca que marque os backups agendados como qualificados para serem arquivados.

O objeto resultante do PowerShell é o seguinte:

  • Regra de política
    • Regra de backup
      • Parâmetro de backup
        • Tipo de backup (um backup de banco de dados completo nesse caso)
        • Armazenamento de dados inicial (em que os backups chegam inicialmente)
        • Gatilho (como o backup é acionado)
          • Cronograma
          • Critérios de marcação padrão (uma marca padrão que vincula todos os backups agendados à regra de retenção)
          • Novos critérios de marcação para a nova regra de retenção com o mesmo nome
    • Regra de retenção padrão (uma regra que é aplicada a todos os backups, por padrão, no armazenamento de dados inicial)
    • Nova regra de retenção
      • Ciclo de vida
        • Armazenamento de dados de origem
        • Período de tempo para exclusão no armazenamento de dados de origem
        • Copiar para o datastore de destino

Recuperar o modelo de política

Para entender os componentes internos de uma política de backup para backup do banco de dados PostgreSQL, recupere o modelo de política usando o az dataprotection backup-policy get-default-policy-template comando. Esse comando retorna o modelo de política padrão para um tipo de fonte de dados. Use este modelo de política para criar uma nova 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"
    }
  ]
}

O modelo de política consiste em um gatilho (que decide o que dispara o backup) e um ciclo de vida (que decide quando excluir, copiar ou mover o backup). Em um backup de banco de dados PostgreSQL, o valor padrão do gatilho é um gatilho semanal agendado (um backup a cada sete dias). Cada backup é mantido por três meses.

Gatilho agendado

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

Ciclo de vida padrão da regra de detenção

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

Modificar o modelo de política

No Azure PowerShell, você pode usar objetos como locais de preparo para executar todas as modificações. Na CLI do Azure, você precisa usar arquivos, pois não há noção de objetos. Cada operação de edição deve ser redirecionada para um novo arquivo, em que o conteúdo é lido do arquivo de entrada e redirecionado para o arquivo de saída. Posteriormente, você pode renomear o arquivo conforme necessário ao usá-lo em um script.

Modificar o agendamento

O modelo de política padrão oferece um backup uma vez por semana. Você pode modificar a agenda para que o backup ocorra vários dias por semana. Para modificar o agendamento, use o az dataprotection backup-policy trigger set comando.

O exemplo a seguir modifica o backup semanal para domingo, quarta e sexta-feira de cada semana. A matriz de datas da agenda menciona as datas, e os dias correspondentes são considerados dias da semana. Você também precisa especificar que essas agendas devem ser repetidas toda semana. Portanto, o intervalo de agendamento é 1 e o tipo de intervalo é 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

Adicionar uma nova regra de retenção

Se você quiser adicionar proteção contra arquivos, será necessário modificar o modelo de política.

O modelo padrão tem um ciclo de vida para o armazenamento de dados inicial sob a regra de retenção padrão. Nesse cenário, a regra diz para excluir os dados de backup após três meses. Você deve adicionar uma nova regra de retenção que define quando os dados são movidos para o datastore de arquivo. Ou seja, os dados de backup são primeiro copiados para o armazenamento de dados de arquivamento e depois são excluídos no armazenamento de dados do cofre.

Além disso, a regra deve definir por quanto tempo manter os dados no banco de dados de arquivo. Para criar novos ciclos de vida, use o az dataprotection backup-policy retention-rule create-lifecycle comando. Para associar esses ciclos de vida a regras novas ou existentes, use o az dataprotection backup-policy retention-rule set comando.

O exemplo a seguir cria uma nova regra de retenção chamada Monthly. Nessa regra, o primeiro backup bem-sucedido de cada mês é mantido no cofre por seis meses, movido para a camada de arquivo morto e mantido na camada de arquivo morto por 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

Adicionar uma etiqueta e os critérios relevantes

Depois de criar uma regra de retenção, você precisa criar uma marca correspondente na propriedade Trigger da política de backup. Para criar novos critérios de marcação, use o az dataprotection backup-policy tag create-absolute-criteria comando. Para atualizar a marca existente ou criar uma nova marca, use o az dataprotection backup-policy tag set comando.

O exemplo a seguir cria uma nova marcas junto com o critério, que é o primeiro backup bem-sucedido do mês. A tag tem o mesmo nome que a regra de retenção correspondente a ser aplicada.

Neste exemplo, os critérios de tag são nomeados 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

Se o agendamento for de vários backups por semana (todos os domingos, quartas e quintas-feiras, conforme especificado no exemplo anterior) e você quiser arquivar os backups de domingo e sexta-feira, você poderá alterar os critérios de marcação usando o az dataprotection backup-policy tag create-generic-criteria comando:

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

Criar uma nova política de backup do PostgreSQL

Depois de modificar o modelo de acordo com os requisitos, use o az dataprotection backup-policy create comando para criar uma política usando o modelo modificado:

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

Configurar backup

Depois de criar o cofre e a política, você precisa considerar três pontos críticos para fazer backup de um banco de dados PostgreSQL no Banco de Dados do Azure para PostgreSQL.

Entender as principais entidades

Banco de dados PostgreSQL a ser feito backup

Busque a ID do Resource Manager do banco de dados PostgreSQL para fazer backup. Essa ID serve como o identificador do banco de dados. O exemplo a seguir usa um banco de dados nomeado empdb11 no servidor testposgresqlPostgreSQL, que está presente no grupo ossrg de recursos em uma assinatura diferente. O exemplo usa Bash.

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

Cofre de chaves criptográficas

O serviço do Backup do Azure não armazena o nome de usuário e a senha para se conectar ao banco de dados PostgreSQL. Em vez disso, o administrador de backup semeia as chaves no cofre de chaves. O serviço de Backup do Azure acessa o cofre de chaves, lê as chaves e acessa o banco de dados.

O exemplo a seguir usa Bash. Observe o identificador secreto da chave relevante.

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

Cofre de backup

Um cofre de backup precisa se conectar ao servidor PostgreSQL e, em seguida, acessar o banco de dados por meio das chaves presentes no cofre de chaves. Portanto, o cofre de Backup requer acesso ao servidor PostgreSQL e ao cofre de chaves. O acesso é concedido à identidade gerenciada do cofre de backup.

Leia sobre as permissões que você deve conceder à identidade gerenciada do cofre de backup no servidor PostgreSQL e no cofre de chaves que armazena as chaves do banco de dados.

Preparar a solicitação

Depois de definir todas as permissões relevantes, execute a configuração do backup em duas etapas:

  1. Prepare a solicitação usando o cofre, a política e o banco de dados PostgreSQL relevantes no comando az dataprotection backup-instance initialize.
  2. Envie a solicitação para fazer backup do banco de dados usando o 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

Executar um backup sob demanda

Você precisa especificar uma regra de retenção enquanto dispara o backup. Para exibir as regras de retenção em uma política, navegue pelo arquivo JSON da política. No exemplo a seguir, há duas regras de retenção com os nomes Default e Monthly. Este artigo usa a Monthly regra para o backup sob demanda.

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 disparar um backup sob demanda, use o 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

Acompanhar trabalhos

Acompanhe todos os trabalhos usando o az dataprotection job list comando. Você pode listar todos os trabalhos e buscar um detalhe de trabalho específico.

Você também pode usar Az.ResourceGraph para rastrear todos os trabalhos em todos os cofres de backup. Use o comando az dataprotection job list-from-resourcegraph para buscar as tarefas relevantes nos cofres de backup.

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