Icono del sitio Programando a medianoche

Hacer backup de todas las bases de un servidor MySQL o MariaDB en Linux

Database and computer data security concept: metal hard disk icon covered by protection shield isolated on white background

MySql BackupAl igual que contaba en los artículos «Hacer backup de todas las bases de un SQL Server» y en «Hacer backup de todas las bases de un servidor MySQL o MariaDB en Windows«, uno de los problemas que podemos tener en un motor de base de datos utilizado para desarrollo es la constante creación y eliminación de bases, principalmente cuando tenemos muchos proyectos, lo que nos dificulta la tarea de hacer backups programados.
Cuando pensamos que finalmente teníamos este problema resuelto (ya que automatizamos los backups de MySql y SQL Server) recibimos nuevos proyectos para modificar sistemas que utilizan MariaDB sobre Linux. Aunque se puede utilizar el mismo comando que usamos para MySql, el mysqldump, el problema ahora era que estábamos utilizando Linux (CentOS en nuestro caso), lo cual no nos permitía utilizar el BAT que ya teníamos.
Por todo lo comentado anteriormente es que creamos un script .sh para automatizar esta tarea, que envía una consulta al motor para obtener el nombre de las bases, genera el script de cada una, los comprime (utilizamos el RAR 5) y luego enviamos el archivo a nuestro servidor de backups utilizando como nombre del archivo la fecha actual con el mismo formato que lo tenemos en los otros backup.
Bueno, vamos al código…

USER="usuarioMySql"
PASSWORD="claveMySql"

#Busco las bases de datos de MySql o MariaDB
echo "Buscando las bases de datos"
databases=`mysql -u $USER -p$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`

#Por cada base de datos que no sea del sistema genero el script usando mysqldump
for db in $databases; do
    if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != _* ]] ; then
        echo "Creando script de la base $db"
        mysqldump -u $USER -p$PASSWORD --databases $db > $db.sql
    fi
done

#Comprimo los scripts creados utilizando rar (se podría cambiar por gzip o algún otro compresor)
echo "Comprimiendo los scripts"
/opt/rar/rar A -s -ma -m5 -rr3p -tk -r -df `date +%Y%m%d`.rar *.sql

#Copio los archivos a nuestro servidor a través de FTP
echo "Copiando backup al servidor"
curl -T *.rar ftp://servidor/Backups/mariadb/ --user usuarioFtp:claveFtp

#Elimino los archivos temporales
echo "Eliminando temporales"
rm -f *.sql
rm -f *.rar

Este script lo ejecutamos periódicamente utilizando cron para asegurarnos de no perder nada en caso de falla de los discos o por si necesitamos una versión anterior de alguna base de datos.
Espero les sirva.
Suerte!

Salir de la versión móvil