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:
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.
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.
Ver comentarios
Muchas gracias por la info, me ha ayudado rápidamente y a la primera ha funcionado.
Excelente Javier muchas gracias
Me encanta cuando un plan se realiza
La automatización es básica cuando hablamos de sistemas.
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