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