Partilhar 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 suportados e as perguntas frequentes sobre o 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 para novas cargas de trabalho suportadas pelo Backup do Azure, como o Banco de Dados do Azure para servidores PostgreSQL, blobs em uma conta de armazenamento e discos do Azure. Os cofres de backup ajudam a organizar os dados de backup e, ao mesmo tempo, minimizam a sobrecarga de gerenciamento. Os cofres de backup são baseados no modelo do Azure Resource Manager do Azure, que fornece recursos aprimorados para ajudar a proteger os dados de backup.

Antes de criar um cofre de backup, escolha a redundância de armazenamento dos dados dentro do cofre. Em seguida, proceda à criação do cofre de backup com essa redundância de armazenamento e a localização.

Neste artigo, você cria um cofre de backup com o nome TestBkpVault, na westus região, sob o grupo testBkpVaultRGde recursos . 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.

Compreender a política de backup do PostgreSQL

Por outro lado, enquanto o backup em disco oferece vários backups por dia e o backup do blob é um backup contínuo sem necessidade de acionador, o backup do PostgreSQL oferece proteção de arquivamento. Os dados de backup enviados pela primeira vez para o vault 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 para PostgreSQL:

  • Regra de política
    • Regra de backup
      • Parâmetro de backup
        • Tipo de backup (um backup de banco de dados completo neste caso)
        • Armazenamento de dados inicial (onde os backups aterrissam inicialmente)
        • Trigger (como o backup é acionado)
          • Cronograma
          • Critérios de marcação padrão (uma tag 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 eles são acionados (por meio de uma programação), com o que são marcados, onde aterrissam (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 indica disparar um backup completo toda semana. Os backups são transferidos para o cofre, onde são armazenados por três meses.

Se quiser adicionar a camada de arquivo à política, você precisa decidir quando os dados serão movidos do cofre para o arquivo, por quanto tempo os dados permanecerão no arquivo 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 repositório de dados do cofre para o repositório 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 arquivamento. Em seguida, você precisa adicionar uma tag que marque os backups agendados como elegíveis para serem arquivados.

O objeto PowerShell resultante é o seguinte:

  • Regra de política
    • Regra de backup
      • Parâmetro de backup
        • Tipo de backup (um backup de banco de dados completo neste caso)
        • Armazenamento de dados inicial (onde os backups aterrissam inicialmente)
        • Trigger (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 de banco de dados PostgreSQL, recupere o modelo de política usando o az dataprotection backup-policy get-default-policy-template comando. Este 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 aciona 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 para o gatilho é um gatilho semanal agendado (um backup a cada sete dias). Cada backup é retido por três meses.

Trigger agendado

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

Ciclo de vida padrão para a regra de retençã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, porque não há noção de objetos. Cada operação de edição deve ser redirecionada para um novo arquivo, onde o conteúdo é lido do arquivo de entrada e redirecionado para o arquivo de saída. Mais tarde, você pode renomear o arquivo conforme necessário ao usá-lo em um script.

Modificar o cronograma

O modelo de política padrão oferece um backup uma vez por semana. Você pode modificar o agendamento para que o backup aconteça vários dias por semana. Para modificar a agenda, 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 do cronograma indica as datas, e os dias da semana correspondentes são considerados como dias úteis. Você também precisa especificar que esses horários devem ser repetidos todas as semanas. Assim, o intervalo de programação é 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 quiser adicionar proteção de arquivamento, você precisa 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 defina quando os dados são movidos para o armazenamento de dados de arquivamento. Ou seja, os dados de backup são primeiro copiados para o datastore de arquivo e, em seguida, são eliminados no datastore do cofre.

Além disso, a regra deve definir por quanto tempo os dados devem ser mantidos no armazenamento de dados de arquivamento. 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 arquivamento e mantido na camada de arquivamento 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 tag e os critérios relevantes

Depois de criar uma regra de retenção, você precisa criar uma tag correspondente na Trigger propriedade 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 tag existente ou criar uma nova tag, use o az dataprotection backup-policy tag set comando.

O exemplo a seguir cria uma nova tag junto com os critérios, 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 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, 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 a cópia de segurança

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.

Compreender as principais entidades

Banco de dados PostgreSQL para backup

Procure a ID do Gerenciador de Recursos do banco de dados PostgreSQL para backup. Esse ID serve como identificador do banco de dados. O exemplo a seguir usa um banco de dados nomeado empdb11 sob o servidor testposgresqlPostgreSQL , que está presente no grupo ossrg de recursos sob 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 de 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 insere as chaves no cofre de chaves. Em seguida, 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 tem que se conectar ao servidor PostgreSQL e, em seguida, acessar o banco de dados através das chaves presentes no cofre de chaves. Assim, 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 no banco de dados.

Preparar o pedido

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

  1. Prepare a solicitação usando o vault, a política e o banco de dados PostgreSQL relevantes no az dataprotection backup-instance initialize comando.
  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 uma cópia de segurança a pedido

Você precisa especificar uma regra de retenção enquanto aciona 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 acionar 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 tarefas

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

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

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