Saltar al contenido principal

🐘 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)

  1. Acceda al servidor PostgreSQL.
  2. 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.conf del 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