NOTA: Cuando me refiero a backups me refiero al proceso completo del backups no solo a realizar copias de la base de datos, sino también a restaurarlas y comprobar su correcto funcionamiento.
Que vamos ver en este artículo
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 .sqlpg_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 .backuppg_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 restaurarlosPara 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
... y esto es todo amig@s!!! hasta la próxima ...
Saludos
Alex
:-)
/