Sign up with your email address to be the first to know about new products, VIP offers, blog features & more.

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?

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:

Para comprobar que todo marcha correctamente podemos ejecutar:

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:

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):

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

 

  • Pingback: Bitacoras.com()

  • Ivan

    Muchas gracias por la info, me ha ayudado rápidamente y a la primera ha funcionado.

  • Jorge Douglas Hernández

    Excelente Javier muchas gracias

    Me encanta cuando un plan se realiza

  • La automatización es básica cuando hablamos de sistemas.

  • christian Dextre Pineda

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

  • alex lopez

    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

Leer entrada anterior
¿Cómo traducir programas libres? Uso en PHP (Parte III)

Si ya hemos hablado en líneas generales del tema y hemos comentado cómo hacer uso de los ficheros .po, .mo...

Cerrar