Cómo crear backups y restaurarlos de forma eficiente en PostgreSQL



La gestión de backups en PostgreSQL es una de las cosas más importantes a la que tenemos que dedicarle tiempo y cariño para que en momentos complicados tengamos disponibles nuestros datos.





Un backups es algo que tarde o temprano hace falta en algún momento de la vida de la base de datos ya sea porque hay que recuperar la base de datos completa o datos parciales.


1) Realizar backup

PostgreSQL proporciona una herramienta nativa para realizarlos y dos formas de hacer el backup. Un backup básico a fichero de texto .sql

pg_dump -U usuario -h localhost -p 5432 nombre_base_datos > backup.sql

En esta opción si incluimos el parámetro -b para hacer backups de los blobs.

Un backup con formato binario y extensión .dump o .backup

pg_dump -U usuario -h localhost -p 5432 -F c -b -v -f backup.dump nombre_base_datos

Donde:
  • -F c → formato custom (comprimido)
  • -b → incluye objetos grandes (BLOBs)
  • -v → modo verbose
  • -f → archivo de salida


2) Restaurar backups

Una vez hechos hay que restaurarlos Para restaurar un fichero .sql se hace con la siguiente instrucción

psql -U usuario -h localhost -p 5432 -d nombre_base_datos < backup.sql

Esto no crea la base de datos debe existir la base de datos.

Si el fichero .sql contiene CREATE DATABASE se puede restaurar sin la base de datos en el comando.

Si, el fichero es binario se restaura de con:

pg_restore -U usuario -h localhost -p 5432 -d nombre_base_datos backup.dump



3) Plan de recuperación de backups

Hasta aquí todo muy fácil, hacer backup, restaurar backup pero ahora viene la parte importante del backup.

Tener un plan de recuperación de los backups que los restaure en otra máquina y que verifique que se ha realizado correctamente.

Y esto se puede hacer automatizando el proceso:

  • Realizar el Backup
  • Restauración del backup en otra maquina
  • Comprobar que la base de datos está correcta

¿ Y cómo se comprueba que está todo correcto ?

pues lo mejor es automatizarlo todo porque de esta forma el trabajo se realiza automáticamente y solo tenemos que ir verificando que todo está bien.

Con scripts en python o bash, muy rápidos, se pueden automatizar tareas de comprobación como por ejemplo:

  • Verificar el hay backup, que el fichero no está vacío
  • Verificar el número de tablas y campos
  • Verificar que las tablas tienen datos
  • Verificar que en origen y destino tiene los mismos indices
  • Verificar que en origen y destino tienen los mismo datos (**)
  • Comprobar relaciones de integralidad buscando huérfanos
  • Comprobar las secuencias, si hay menos secuencias que en la tabla original algo va mal.

Si pasamos a nivel pro se podría automatizar un test de pruebas que simulen producción para saber que esa base de datos está correcta.

(**) Esta opción es complicada y difícil de realizar porque los datos en origen lo normal es que vayan creciendo si es el caso se pueden poner unos rangos donde por debajo de un % de datos salte una alarma.

4) Conclusión

Tener backups y saber que están bien es importante para no tener pérdida de datos.

Quizás la forma más segura de tener un backup de tu base de datos o de todo el servidor es tener una réplica en tiempo real. Con esto nos aseguramos que los datos están en dos sitios a la vez.

Aunque no está exenta de riesgos porque si se compromete la base de datos principal los datos comprometidos pasaran a la réplica

Así, que lo mejor es una combinación de ambas opciones replica + backups + comprobación del backup.

Parece mucho trabajo pero una vez automatizado sólo hay que comprobar que funciona todo bien aleatoriamente.

Lo que no podemos hacer es hacer un Backup de la base de datos y decir que ya tenemos copias de seguridad porque a la hora de la verdad, cuando hacen falta, esas copias:

  • o no funcionan
  • o estan mal hechas
  • o se han perdido
  • o cuesta “la vida” recuperarlas
¿A cuantos les ha pasado eso?


... y esto es todo amig@s!!! hasta la próxima ...
Saludos
Alex
:-)
/

Suscríbete a nuestra newsletter

Sin spam. Solo contenido útil para profesionales de bases de datos.