Categorías: Tutoriales

Programar copias de seguridad automáticas de PostgreSQL

Si hace unos días hablábamos de cómo hacer backup y restaurar copias de seguridad con MySQL, hoy vamos a hablar de cómo hacerlo con PostgreSQL, incluyendo un detalle más: la automatización para que se ejecute de forma periódica y automática.

pg_dump

Si con MySQL usamos mysqldump, con PostgreSQL utilizamos pg_dump. ¿Cuál es la sintaxis básica?

pg_dump -h direccion_servidor -U nombre_usuario nombre_base_datos > "fichero.sql"

Cuando ejecutas te pide tus credenciales y se genera el fichero con el volcado. Recuerda que para poder autenticarte usando la contraseña, debes indicar método “PASSWORD” dentro del fichero pg_hba.conf (más información en esta entrada: Permitir conexiones entrantes a un servidor PostgreSQL).

Fichero pgpass

pg_dump no permite como mysqldump pasarle como parámetro la contraseña, de forma que a la hora de automatizar el proceso a través de un cron deberemos usar una de las siguientes dos técnicas:

  • Crear un fichero pgpass
  • Crear una variable de entorno

Elegimos el primer método por flexibilidad.

Debemos crear un fichero de .pgpass en el raíz de nuestro usuario con los permisos muy restringidos: 600 como mucho (lectura y escritura para el usuario), tened en cuenta que el fichero va a contener credenciales.

Se trata de un fichero en texto plano con la siguiente estructura:

servidor:puerto:base_datos:usuario:contraseña

Para comprobar que todo marcha correctamente podemos ejecutar:

$ psql -h direccion_servidor -U usuario base_datos

Si la conexión es válida y no nos pide contraseña, el fichero .pgpass funciona correctamente (para salir recuerda “\q” en el intérprete).

Ya tenemos la conexión configurada, sólo nos queda configurar el crontab para automatizar la copia.

Automatización con crontab

Para terminar, vamos a crear un pequeño script que automatice esta tarea y lo vamos a programar  para que se ejecute periódicamente gracias a cron. Lo primero será crear un fichero .sh con permisos de ejecución con la orden de copia de seguridad. Si queréis que os genere un fichero del estilo “db_back_Lunes.sql”, podéis usar el siguiente código:

#! /bin/bash
fecha=`date +%A`
pg_dump -h direccion_servidor -U usuario base_datos > "db_back_$fecha.sql"

Ahora accedemos a crontab (situado en /etc) lo editamos y estará listo, agregamos una línea como la siguiente para que se ejecute a diario (en esta línea en concreto se ejecuta a las 2:00 am, buena hora para este tipo de operaciones):

0 2 * * * usuario /ruta_a_fichero/backup_pg.sh

Esto es todo, si tenéis dudas, objeciones, correcciones o comentarios estaremos encantados de atenderos vía comentarios.

 

F. Javier Carazo Gil

Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

Ver comentarios

  • Hola amigo, una pregunta en donde se guarda el backup genrado , en el script no indica el directorio donde se guarda.
    Saludos

  • una duda cree un backup de mi directorio home y lo guarde en un directorio donde tengo mas de una y los diferencio por que a la hora de crearlas le pongo un date en el nombre con el año mes fecha hora minutos ejemplo(2017-09-02-20-48-copia.tar) y dia mi duda es....quiero crear un script para que a la hora de restaurar mi backup lo haga solo y solo restaure la copia mas moderna segun la fecha que tengo en el nombre quizas con un find? pero no se muy bien como plantearlo

Entradas recientes

DeepSeek

2 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

1 mes hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace