Conceptos básicos de PITR
La recuperación a un punto en el tiempo (PITR) restaura una copia de seguridad base y luego reproduce los WAL archivados hasta una hora, transacción o punto de restauración con nombre de destino. Permite recuperarse de errores del operador entre copias de seguridad.
Receta
Habilite el archivado en PostgreSQL 18.4 primario; tome una copia de seguridad base; restaure con
recovery_target_time.
ALTER SYSTEM SET archive_mode = on;
ALTER SYSTEM SET archive_command = 'test ! -f /wal_archive/%f && cp %p /wal_archive/%f';
-- se requiere reiniciar para archive_mode# Copia de seguridad base
pg_basebackup -h primary.internal -U replicator -D /restore/data -Fp -Xs -P
# Señal de recuperación + objetivo en postgresql.conf en el host de restauración
# recovery_target_time = '2026-07-09 14:32:00+00'
# restore_command = 'cp /wal_archive/%f %p'Cuándo usar esto: Recuperación de DROP TABLE, migración incorrecta o ventana de ransomware cuando los volcados lógicos están demasiado desactualizados.
Ejemplo de funcionamiento
Comprobación de archivo, copia de seguridad base y configuración de recuperación:
-- Primario: estado del archivador
SELECT archived_count, last_archived_wal, last_archived_time, failed_count
FROM pg_stat_archiver;
-- Cree un punto de restauración con nombre antes de un cambio arriesgado
SELECT pg_create_restore_point('before_index_rebuild');# postgresql.conf del host de restauración (o 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-- Después de la promoción: confirme que la recuperación ha finalizado
SELECT pg_is_in_recovery();
SELECT pg_wal_replay_resume(); -- solo si está en pausaLo que esto demuestra:
- El archivo continuo de WAL une el tiempo de la copia de seguridad base con el momento objetivo.
recovery.signalinicia la instancia en modo de recuperación (PostgreSQL 12+).- Los puntos de restauración con nombre proporcionan objetivos precisos y documentados.
Análisis en profundidad
Línea de tiempo de PITR
[Copia de seguridad base T0] ---- archivo WAL ---- [Objetivo T1] ---- [Ahora]
reproduce solo este segmento
Piezas requeridas
| Pieza | Rol |
|---|---|
| Copia de seguridad base | Imagen inicial consistente (pg_basebackup, pgBackRest) |
| Archivo WAL | Cada segmento WAL desde el final de la copia de seguridad hasta el objetivo |
restore_command | Recupera WAL en pg_wal durante la recuperación |
| Objetivo de recuperación | Tiempo, XID, LSN o nombre que detiene la reproducción |
Implicación del RPO
El RPO de PITR es igual al último WAL archivado con éxito (más cualquier WAL no archivado en el primario fallido). Supervise pg_stat_archiver.failed_count.
Trampas
archive_modedesactivado hasta el incidente - Sin cadena WAL; solo se puede recuperar el tiempo de la copia de seguridad base. Solución: Habilite el archivado desde el primer día.- Segmento WAL faltante en el archivo - La recuperación se detiene antes del objetivo. Solución: Replique los archivos a una segunda región; alerte sobre las brechas.
- Zona horaria incorrecta en
recovery_target_time- Se recupera en el momento equivocado. Solución: Use un desplazamiento explícito (+00) otimestamptz. - Recuperación sobre el
data_dirde producción - Destruye el clúster actual. Solución: Restaure en un host nuevo; cámbielo después de la validación. - Olvidar
recovery_target_action- La recuperación se pausa en el objetivo indefinidamente. Solución: Establezcapromoteopausedeliberadamente.
Alternativas
| Alternativa | Usar cuándo | No usar cuándo |
|---|---|---|
pg_restore a nivel de objeto | Tener un volcado de tabla reciente | Necesitar precisión a nivel de minuto |
| Promoción de réplica | Solo conmutación por error de HA | Necesitar retroceder antes de una eliminación |
| UI PITR en la nube | RDS/Aurora/Neon | archive_command autohospedado |
Preguntas frecuentes
¿`archive_mode` requiere reinicio?
Sí, al habilitar archive_mode desde desactivado. Planifique una ventana de mantenimiento.
¿PITR vs. standby?
Standby es continuo hacia adelante; PITR retrocede a un punto anterior usando el archivo.
¿Cuánto tiempo conservar los archivos WAL?
Al menos la ventana de cumplimiento; a menudo de 7 a 35 días para errores operativos más el mínimo legal.
¿pgBackRest y PITR?
pgBackRest administra la copia de seguridad base + WAL en el repositorio; establezca el objetivo de restauración --type=time.
¿Puede PITR deshacer un DELETE?
Sí, si el WAL que contiene DELETE no ha sido reciclado y está en el archivo.
Relacionados
- archive_mode & archive_command - envío de WAL
- Opciones de objetivo de recuperación - condiciones de parada
- Manual de ejecución de simulacro de PITR - restauración medida
- Conceptos básicos de copia de seguridad - copias de seguridad físicas
Versiones de la pila: Esta página se escribió para PostgreSQL 18.4 (estable 18, mantenimiento 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x y PostGIS 3.5+.