Copias de seguridad en PostgreSQL y cómo restaurarlas
No hace falta que os diga la necesidad urgente de realizar copias de seguridad de las bases de datos o de cualquier cosa que tengamos en producción, en entornos empresariales. Por lo que en esta entrada vamos a ver como realizar copias de seguridad en PostgreSQL y cómo restaurarlas.
Si realizas copias de seguridad de forma frecuente, por ejemplo de forma automatizada , con un trabajo cron, podrás restaurar rápidamente las bases de datos. Aprovechando las herramientas que nos brinda el propio PostgreSQL, que son fáciles de utilizar y administrar.
Si has llegado hasta entrada entiendo que ya debes conocer este motor de base dedatos, sino es así hemos hablado largo y tendido en la web sobre ella, desde como instarla en una distribución Debian 10 o en una Centos 8, a configurar su acceso de forma remota.
Copias de seguridad en PostgreSQL
PostgreSQL proporciona la utilidad pg_dump
para simplificar la copia de seguridad de una sola base de datos. Este comando debe ejecutarse como un usuario con permisos de lectura en la base de datos que desea respaldar.
Lo primero, por ejemplo utilizando el usuario root, accedemos al usuario postgres
su - postgres
Volcamos el contenido de una base de datos a un fichero:
pg_dump dbnombre > dbnombre.bak
El archivo de respaldo resultante, "dbnombre.bak"
, puede transferirse a otro host con scp
o almacenarse localmente para su uso posterior. Lo recomendado es añadir una etiqueta identificativa como la fecha:
pg_dump dbnombre > dbnombrebackup-$(date +"%d%m%Y").bak
Restaurar copias de seguridad
Para restaurarlas utilizaremos el mismo comando, pero de la siguiente manera:
psql prueba < dbnombre.bak
También podemos especificar el nombre de usuario que gestiona la de datos con el parámetro -U
, la contraseña con -P
, o bien sin contraseña con -W
.
psql -U dbusuario -W -h localhost dbnombre < dbnombre.bak
Base de datos remota
Así como psql
nos permite conectarnos a un host remoto, pg_dump
se puede ejecutar desde una computadora cliente para hacer una copia de seguridad de los datos en un servidor remoto. Usamos el parámetro -h
para especificar la dirección IP del nodo y -p
para identificar el puerto en el que PostgreSQL está escuchando:
pg_dump -h x.y.z.w -p 5432 dbnombre > dbnombre.bak
Todas las bases de datos
Debido a que pg_dump
solo crea una copia de seguridad de una base de datos a la vez, no almacena información sobre los roles de la base de datos u otra configuración de todo el clúster. Para almacenar esta información y hacer una copia de seguridad de todas sus bases de datos simultáneamente, podemos utilizar pg_dumpall
Creamos la copia de seguridad:
pg_dumpall > pg_copia_seguridad.bak
Y para restaurar todas las bases de datos:
psql -f pg_copia_seguridad.bak postgres
Automatizar copias de seguridad con Cron
Lo más probable es que queramos crear un trabajo con cron para que se haga una copia de seguridad de la base de datos automáticamente, de forma regular, por ejemplo cada noche de madrugada
En el ejemplo veremos como programarlo de forma semanal. Primero debemos acceser con el usuario correspondiente:
su - postgres
Se supone que tenemos ya creado un punto de montaje donde almacenar las copias de seguridad. Lo habitual es utilizar un lugar remoto, generalmente un sistema de cabinas de almacenaje, a laque seguramente accederemos vía NFS o CIFS. En nuestro caso imaginamos un punto de montaje en "/mnt/backups"
.
Creamos la tarea programada:
crontab -e
Con el contenido:
0 0 * * 0 pg_dump -U postgres dbnombre > /mnt/backups/dbnombrebackup-$(date +"%d%m%Y").bak
Guardamos y salimos del editor.
Y con esto ya lo tendremos listo. Espero que esta entrada os sea de utilidad en algún momento.
Para ampliar información: Documentación de PostgreSQL