🐘 Restauración Física de PostgreSQL con pg_basebackup
El pg_basebackup se utiliza para realizar la restauración física completa de PostgreSQL, siendo indicado para reconstrucción de nodos, replicación, recuperación de fallas críticas y reconstrucción controlada de entornos.
📌 Cuándo utilizar este procedimiento
- Corrupción del directorio de datos (
PGDATA) - Nodo perdió sincronización con el primario
- Recreación de réplica PostgreSQL
- Recuperación tras falla grave
- Reconstrucción completa de la base
⚠️ Atención: este procedimiento elimina completamente los datos locales del nodo destino.
⚙️ Requisitos previos
Antes de iniciar, asegúrese de que:
- PostgreSQL esté instalado y sea compatible
- Usuario de replicación esté configurado (ej:
replication) - Haya conectividad con el nodo primario
- El servicio PostgreSQL esté detenido
- Haya espacio suficiente en disco
🔍 Identificar el directorio de datos (PGDATA)
- Acceda al servidor PostgreSQL.
- Ejecute el siguiente comando para identificar el directorio de datos utilizado por la base.
Verificando data_directory
sudo -u postgres psql -c "SHOW data_directory;"
Ejemplo de resultado:
/var/lib/pgsql/data
2. Detener el servicio PostgreSQL
Antes de la restauración física, PostgreSQL debe estar completamente detenido.
sudo systemctl stop postgresql
Confirme que no haya procesos activos:
ps aux | grep '[p]ostgres'
3. Limpiar el directorio de datos
⚠️ Este paso es irreversible.
Elimina todo el contenido actual de la base de datos.
sudo rm -rf /var/lib/pgsql/data/*`
4. Ejecutar la restauración con pg_basebackup
Ejecute la restauración física directamente desde el nodo primario.
PGPASSWORD='SENHA_DO_USUARIO_REPLICATION' \
pg_basebackup \
-h 10.100.0.00 \
-p 5432 \
-U replication \
-D /var/lib/pgsql/data \
-X stream \
-P
Parámetros utilizados
-
-h→ Dirección IP del nodo primario -
-p→ Puerto de PostgreSQL -
-U→ Usuario de replicación -
-D→ Directorio de datos (PGDATA) -
-X stream→ Transmisión continua de los WALs -
-P→ Muestra progreso de la operación
5. Ajustar permisos del directorio
Tras completar el pg_basebackup, ajuste los permisos del directorio restaurado.
chown -R postgres:postgres /var/lib/pgsql/data
6. Iniciar PostgreSQL
Inicie nuevamente el servicio PostgreSQL.
sudo systemctl start postgresql
O, si aplica:
sudo systemctl start postgresql-17
✅ Validaciones Post-Restauración
Verificar estado del servicio
systemctl status postgresql
Confirmar acceso a la base
sudo -u postgres psql
🔁 Entornos con Replicación
En entornos con replicación configurada:
-
El nodo restaurado se convierte en réplica
-
La sincronización ocurre automáticamente tras el inicio
-
Compatible con:
-
repmgr -
patroni -
Replicación nativa de PostgreSQL
-
📌 Siempre valide el estado de la réplica tras la restauración.
🧠 Buenas Prácticas
-
Utilice usuario exclusivo para replicación
-
Ejecute el procedimiento en ventana de mantenimiento
-
Monitoree espacio en disco durante el restore
-
Pruebe periódicamente el proceso de reconstrucción
-
Revise logs y métricas tras la restauración
🛠️ Solución de Problemas
Fallo de conexión en pg_basebackup
-
Verifique reglas en el
pg_hba.confdel nodo primario -
Confirme permisos del usuario de replicación
PostgreSQL no inicia tras el restore
-
Verifique permisos del directorio
-
Analice logs de PostgreSQL
-
Confirme compatibilidad de versión
Replicación no sincroniza
-
Verifique
primary_conninfo -
Confirme disponibilidad de WALs en el primario
📎 Observaciones Finales
-
Este procedimiento no es reversible
-
Siempre valide el nodo primario antes de la ejecución
-
Documente el proceso para auditoría y Recuperación ante Desastres