Noções Básicas de PITR
A recuperação point-in-time (PITR) restaura um backup base e, em seguida, reproduz o WAL arquivado até um tempo alvo, transação ou ponto de restauração nomeado. Ela recupera de erros do operador entre backups.
Receita
Habilite o arquivamento no primário PostgreSQL 18.4; tire um backup base; restaure com
recovery_target_time.
ALTER SYSTEM SET archive_mode = on;
ALTER SYSTEM SET archive_command = 'test ! -f /wal_archive/%f && cp %p /wal_archive/%f';
-- reinicialização necessária para archive_mode# Backup base
pg_basebackup -h primary.internal -U replicator -D /restore/data -Fp -Xs -P
# Sinal de recuperação + alvo em postgresql.conf no host de restauração
# recovery_target_time = '2026-07-09 14:32:00+00'
# restore_command = 'cp /wal_archive/%f %p'Quando usar isso: Recuperação de DROP TABLE, migração incorreta ou janela de ransomware quando dumps lógicos são muito desatualizados.
Exemplo de Trabalho
Verificação de arquivamento, backup base e configuração de recuperação:
-- Primário: saúde do arquivador
SELECT archived_count, last_archived_wal, last_archived_time, failed_count
FROM pg_stat_archiver;
-- Crie um ponto de restauração nomeado antes da alteração arriscada
SELECT pg_create_restore_point('before_index_rebuild');# postgresql.conf do host de restauração (ou postgresql.auto.conf)
cat >> /var/lib/postgresql/18/main/postgresql.auto.conf <<'EOF'
restore_command = 'cp /wal_archive/%f %p'
recovery_target_name = 'before_index_rebuild'
recovery_target_action = 'promote'
EOF
touch /var/lib/postgresql/18/main/recovery.signal
pg_ctl -D /var/lib/postgresql/18/main start-- Após a promoção: confirme que a recuperação foi concluída
SELECT pg_is_in_recovery();
SELECT pg_wal_replay_resume(); -- apenas se pausadoO que isso demonstra:
- O arquivamento contínuo de WAL preenche a lacuna entre o tempo do backup base e o momento alvo.
recovery.signalinicia a instância em modo de recuperação (PostgreSQL 12+).- Pontos de restauração nomeados fornecem alvos precisos e documentados.
Mergulho Profundo
Linha do Tempo do PITR
[Backup base T0] ---- Arquivamento WAL ---- [Alvo T1] ---- [Agora]
reproduz apenas este segmento
Peças Necessárias
| Peça | Papel |
|---|---|
| Backup base | Imagem inicial consistente (pg_basebackup, pgBackRest) |
| Arquivo WAL | Todos os segmentos WAL do fim do backup até o alvo |
restore_command | Busca WAL para pg_wal durante a recuperação |
| Alvo de recuperação | Tempo, XID, LSN ou nome que para a reprodução |
Implicação do RPO
O RPO do PITR é igual ao último WAL arquivado com sucesso (mais qualquer WAL não arquivado no primário com falha). Monitore pg_stat_archiver.failed_count.
Armadilhas
archive_modedesativado até o incidente - Nenhuma cadeia de WAL; apenas o tempo do backup base recuperável. Correção: Habilite o arquivamento desde o primeiro dia.- Segmento WAL ausente no arquivo - A recuperação para antes do alvo. Correção: Replique arquivos para uma segunda região; alerte sobre lacunas.
- Fuso horário incorreto em
recovery_target_time- Recupera para o momento errado. Correção: Use offset explícito (+00) outimestamptz. - Recuperando sobre o
data_dirde produção - Destrói o cluster atual. Correção: Restaure para um novo host; troque após validação. - Esquecer
recovery_target_action- A recuperação pausa no alvo indefinidamente. Correção: Definapromoteoupausedeliberadamente.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| pg_restore em nível de objeto | Tem dump de tabela recente | Precisa de precisão em nível de minuto |
| Promoção de réplica | Apenas failover de HA | Precisa retroceder para antes do DROP |
| UI PITR da Nuvem | RDS/Aurora/Neon | archive_command auto-hospedado |
FAQs
reinicialização de archive_mode é necessária?
Sim, ao habilitar archive_mode de desativado. Planeje uma janela de manutenção.
PITR vs standby?
Standby é contínuo para frente; PITR retrocede para um ponto anterior usando o arquivo.
Por quanto tempo manter arquivos WAL?
Pelo menos a janela de conformidade; frequentemente 7-35 dias para erros operacionais mais o mínimo legal.
pgBackRest e PITR?
pgBackRest gerencia base + WAL no repositório; defina o alvo de restauração --type=time.
PITR pode desfazer DELETE?
Sim, se o WAL contendo DELETE não foi reciclado e está no arquivo.
Relacionados
- archive_mode & archive_command - envio de WAL
- Opções de Alvo de Recuperação - condições de parada
- Runbook de Simulação de PITR - restauração medida
- Noções Básicas de Backup - backups físicos
Versões da Pilha: Esta página foi escrita para PostgreSQL 18.4 (estável 18, manutenção 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x e PostGIS 3.5+.