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
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
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().
no tengo ni idea como usar esta función podrías colaborar me si ni es mucha molestia
La función mail es fácil de usar. Mira la documentación de php.net.
disculpa y como le indico que me ejecute esto cada ves que se ingrese un dato???
Puedes crear una condición con «if» para comprobar cuándo se ha hecho un insert en base de datos.