#!/bin/bash

# Ruta en la que se guarda el log de la operacion de backup.
logfile="/path/to/mysql.log"

# Ruta en la que guardar los backups
backup_dir="/path/to/saved/mysql"

# Usuario
username="<nombre_usuario>"
password="<password_de_acceso>"

# Creamos un nuevo log del proceso de backup
rm -rf $logfile
touch $logfile

# Mediante esta instruccion, generamos un nombre de fichero con el dia y la hora del proceso de backup.
timeslot=`date +%Y%m%d_%H%M`

cd $backup_dir

# Iteramos a traves de la lista de bases de datos a la que el usuario tiene acceso.
  for BBDD in $( mysql -u $username --password=$password -h localhost -Bse 'show databases' ); do
        echo "Creando copia de seguridad de $BBDD"
        
        # Volcamos la base de datos en un fichero temporal
        mysqldump --user=$username --password=$password $BBDD > datos.sql
        
        # Y lo comprimimos en un tar.bz2 para ocupar lo mínimo. Util en bases de datos grandes.
        tar cvjf mysql-$BBDD-$timeslot.tar.bz2 *.sql
        
        # El nombre del fichero resultante contiene el nombre de la base de datos y la fecha de la copia.
        # De esta manera, cuando sea necesaria su restauracion sera mas sencillo de localizar.
        
        echo "Backup completo en la base de datos: $BBDD (mysql-$BBDD-$timeslot.tar.bz2)" >> $logfile
        
        # Borramos el fichero temporal
        rm datos.sql
  done
#-------------------------------------------------

#
# Finalmente podemos enviar un email con el log de acciones para tener controlado el proceso de copia
#
cat $logfile|mail -s "Proceso Backup $HOSTNAME = MySQL" <direccion_email_de_control>

