DBAtlas · Atlas de operações de banco de dados

Backup e PITR com pg_basebackup + arquivo de WAL (sem pgBackRest)

PostgreSQLNível: IntermediárioDuração: 45–90 min

Backup físico com as ferramentas do próprio PostgreSQL, sem software adicional: arquivamento contínuo de WAL com archive_command, base backup noturno com pg_basebackup, retenção com pg_archivecleanup. Recuperação para um ponto no tempo / transação / restore point (recovery.signal, restore_command, recovery_target_*), timelines e um teste de restore periódico; no final você tem o WAL arquivado, um backup noturno e um caminho de volta já testado. Alternativas: se precisar de backup incremental/paralelo/criptografado, S3 e gestão de retenção pronta, use o guia do pgBackRest; para mover uma tabela/banco de dados ou recuperar uma única tabela, use backup lógico (pg_dump, sem PITR).

Topologia: 1 servidor; com streaming ou Patroni o diretório de arquivo é compartilhado por todos os nodes (NFS)

Cenários

  • Configurar o arquivamento de WAL e o base backup noturno — Configuração inicial: arquivamento contínuo de WAL com archive_command, script do pg_basebackup, agendamento em /etc/cron.d, retenção e limpeza de WAL. archive_mode exige um reinício rápido, uma única vez.
  • Recuperar até um ponto específico (PITR: tempo, xid, LSN, restore point) — Dados foram apagados/alterados por engano (DROP, DELETE, TRUNCATE) ou o servidor/disco foi perdido: o base backup é restaurado e o WAL arquivado é aplicado até o alvo. O cluster inteiro é parado e volta ao alvo; tudo o que veio depois do alvo é perdido.
  • Teste de restore (em diretório separado, sem tocar em produção) — Para comprovar que o backup realmente restaura (recomendado uma vez por mês): o último base backup é verificado (pg_verifybackup), extraído em um diretório separado e iniciado em outra porta com o arquivo de WAL; o tempo (RTO) é medido. A produção não é tocada.
  • Limpar base backups antigos e o arquivo de WAL — O disco do arquivo ou do backup está enchendo, ou a retenção mudou: os base backups antigos são apagados e o pg_archivecleanup remove o WAL anterior ao backup mais antigo (primeiro em dry-run). O banco de dados continua aberto.

Antes de começar

  • PostgreSQL … instalado e em execução (pg-install); diretório de dados ….
  • … e … estão em um disco/compartilhamento NFS separado do disco de dados, montado de forma persistente (fstab)… e no mesmo caminho em todos os servidores PostgreSQL (após um failover o novo primary deve gravar no mesmo arquivo)…. Espaço: (número de backups mantidos + 1) × tamanho dos dados compactados + volume diário de WAL × dias de retenção.
  • Nenhuma outra ferramenta de arquivamento/backup (pgBackRest, Barman, WAL-G) está configurada; se duas ferramentas enviarem o mesmo WAL para lugares diferentes, as duas ficam incompletas.
  • Relógios sincronizados por NTP (o horário alvo do PITR é interpretado pelo relógio do servidor).
  • Há uma janela curta de reinício para a mudança de archive_mode.
  • As aplicações estão paradas; está aceito que todas as alterações posteriores ao alvo serão perdidas.… Os standbys/replicas serão recriados após o restore.…

Fases do guia

  • Configuração do arquivo de WAL e do base backup — Preparar os diretórios de arquivo e de backup · Escrever o script de arquivamento de WAL · Tornar o script executável e testá-lo · Gravar a configuração de arquivamento do PostgreSQL · Reiniciar o PostgreSQL · Gravar a configuração de arquivamento no Patroni (edit-config) …
  • Teste de restore — Preparar o diretório do teste e escolher o último backup · Extrair e verificar o backup (pg_verifybackup) · Iniciar a instância de teste com o arquivo · Verificar os dados · Encerrar e limpar a instância de teste
  • Retenção e limpeza de WAL — Backups, tamanho do arquivo e o WAL mais antigo necessário · Apagar os base backups fora da retenção · Mostrar primeiro a limpeza de WAL em dry-run · Limpar o arquivo de WAL · Verificar se o arquivamento continua funcionando
Abrir o plano passo a passo para o seu ambiente →