Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Usando bash y cron para automatizar la copia de seguridad de una base de datos

Imago voragine.net
[actualizado el ]

Este post explica cómo programar un pequeño script en bash que hace copia de seguridad de una base de datos usando mysqldump, y envía el archivo sql generado a una dirección de correo usando el cliente de línea de comandos mutt. Así que hay que tener instalados estos dos paquetes en la máquina donde se vaya a hacer correr el script. El script se ejecutará con la frecuencia deseada usando cron.

El script de bash

 #!/bin/bash
 # crea una copia de seguridad de una base de datos y la envía a una dirección de correo electrónico
 ########################
 ##### variables a editar
 #
 DB_USER=usuario
 DB_PASS=password
 DB_NAME=nombrebasedatos
 BACKUP_DIR=/home/usuario/
 MESSAGE_FILE=backup.mail.message # colocar este archivo en BACKUP_DIR
 USER_MAIL=usuario@dominio.com
 #
 ##### fin de variables a editar
 ########################
 BACKUP_FILE=${BACKUP_DIR}$(date +%Y%m%d)-${DB_NAME}.sql
 # usamos mysqldump para hacer la copia de seguridad que se guarda en BACKUP_DIR
 mysqldump --opt -u ${DB_USER} -p${DB_PASS} ${DB_NAME} > ${BACKUP_FILE}
 # usamos bzip2 para comprimir el sql
 bzip2 ${BACKUP_FILE}
 # usamos mutt para enviar por correo electrónico el archivo sql
 mutt -s "Copia de seguridad base de datos ${DB_NAME}: $(date +%B) de $(date +%Y)" ${USER_MAIL} -a ${BACKUP_FILE}.bz2 < ${BACKUP_DIR}${MESSAGE_FILE}

Enviando la base de datos por correo

El script envía por correo electrónico la base de datos usando mutt, que permite enviar adjuntos. mutt coge el cuerpo del correo, el mensaje, de un archivo que hay que alojar en el directorio donde se alojarán las copias de seguridad, que tenemos que definir en el script mediante la variable BACKUP_DIR. En este ejemplo se llama backup.mail.message y contiene:

<code>Hola,

aquí tienes la copia de seguridad de la base de datos de tu web:

Atentamente,
un robot a tu servicio
</code>

Por supuesto, para poder enviar el correo la máquina tiene que tener funcionando un servidor de correo. Basta con instalar y configurar un servidor de envío de correo, con postfix, sendmail o exim4.

Cronificando la tarea con cron

Para añadir el script a la lista de programas a ejecutar periódicamente por cron podemos usar la orden crontab -e, que abre con el editor predeterminado el archivo de las tareas cronificadas de nuestro usuario en el sistema.

Para que el script se ejecute con una periodicidad mensual, añadiremos una línea como la siguiente:

0 0 1 * * /home/usuario/bin/bd-backup.sh

La sintaxis de crontab es fácil e intuitiva. El último parámetro de la línea es la ruta al script, absoluta si no está en una carpeta dentro de PATH.

El archivo que contiene el script debe tener permisos de ejecución. Como contendrá toda la información necesaria para acceder a nuestra base de datos es conveniente darle permisos 700:

$ chmod 700 bd-backup.sh

6 comentarios

  1. quisiera saber si puedo hacer que cuando se ingrese un nuevo registro en mi base de datos me pueda llegar una alerta a mi correo de que se ingreso un nuevo dato

    espero me puedan colaborar gracias

  2. Hola Nicolas,

    sí, claro que se puede hacer, aunque eso no es de lo que trata este tutorial. Para hacerlo no necesitas cron ni bash, basta con php: cada vez que se inserte un registro en la base de datos, php puede notificarlo mediante su función mail().

      • Por nicolas lopez •

      no tengo ni idea como usar esta función podrías colaborar me si ni es mucha molestia

      1. La función mail es fácil de usar. Mira la documentación de php.net.

    • Por nicolas lopez •

    disculpa y como le indico que me ejecute esto cada ves que se ingrese un dato???

    1. Puedes crear una condición con «if» para comprobar cuándo se ha hecho un insert en base de datos.

×

Responder al comentario de skotperez

*
*

 

No hay trackbacks