Las copias de seguridad son un componente primordial para proteger las bases de datos. Para minimizar el riesgo de pérdida de datos, debes realizar respaldos periódicamente. Y por supuesto, el principal objetivo lo tenemos clarísimo, automatizar el respaldo de las bases de datos.
En este artículo te enseñaré como respaldar una base de datos MySQL en Linux y guardar la copia de seguridad en una cuenta de MEGA. La idea es usar los comandos de MEGAcmd y desarrollar un Script Bash que realice el backup de la base de datos MySQL en un servidor Ubuntu, y traslade el respaldo a MEGA. Evidentemente, se ejecutará automáticamente a una hora específica, por tanto, usaremos Crontab para programar la tarea.
Ciertamente, para los que trabajamos administrando sistemas, la línea de comandos es como “el pan nuestro de cada día”. Como es de esperar, MySQL nos ofrece una poderosa herramienta para realizar backup de base de datos, mysqldump.
mysqldump realiza copias de seguridad lógicas, produciendo un conjunto de instrucciones SQL, la cuales pueden ser ejecutadas para replicar las definiciones de objetos de bases de datos originales y los datos de las tablas.
Existen tres formas de utilizar mysqldump:
A continuación, las instrucciones:
mysqldump [options] db_name [tbl_name ...] > backup.sql
mysqldump [options] --databases db_name ... > backup.sql
mysqldump [options] --all-databases > backup.sql
Hay muchas opciones disponibles que no mencionaré en este artículo. No obstante, te dejaré el enlace para consultar la documentación oficial, opciones de mysqldump. También, siempre puedes consultar la ayuda desde la línea de comandos, ejecutando la siguiente instrucción: mysqldump --help.
Una vez realizado el volcado, puedes trasladar el archivo resultante a otro servidor de respaldo, o bien a un espacio de almacenamiento en la nube, como el ejemplo que dejaré al final.
MEGAcmd es una herramienta de línea de comandos para trabajar con tu cuenta de MEGA y tus archivos. Suena bien ¿no? Personalmente, considero que es una excelente herramienta. Como mencionaba anteriormente, para los administradores de sistemas la línea de comandos está presente en el día a día, y no puedes pretender automatizar tareas, sin el uso de comandos, y por supuesto, el desarrollo de Scripts. Afortunadamente, MEGA ahora nos da esa posibilidad.
Hay más de una forma de instalar MEGAcmd, una es descargar el paquete para la distribución GNU/Linux desde el sitio oficial de MEGA y posteriormente usar gdebi para instalarlo con todas sus dependencias. Si tratamos de automatizar tareas, esta no es la mejor solución, lo ideal es hacer todo desde la consola. Imagínate que usas una herramienta como Ansible para gestionar la configuración, no te servirá ir al sitio web y hacer un par de clics. A continuación, los pasos para hacer la descarga e instalación desde la terminal en un servidor Ubuntu 18.04.
curl -fsSL https://mega.nz/keys/MEGA_signing.key | sudo apt-key add –
sudo echo deb https://mega.nz/linux/MEGAsync/xUbuntu_18.04/ ./ >> /etc/apt/sources.list
sudo apt update
sudo apt install megacmd -y
Configuración de sincronización:
mega-sync /LocalPatch/ /RemotePatch
Copias de seguridad periódicas:
mega-backup /LocalPatch/ /RemotePatch --period="0 0 23 * * *" --num-backups=10
En ambos ejemplos, LocalPatch corresponde a la carpeta local en mi equipo y RemotePatch se refiere a la carpeta en MEGA.
Para explicar a detalles esta poderosa herramienta lo normal sería escribir un artículo dedicado a ello, pero no te preocupes, la documentación es muy completa y fácil de comprender. Puedes consultar guía de usuario de MEGAcmd, donde encontrás todos los comandos y una serie de ejemplos. Lo que sí me interesa compartir es como combinar esta herramienta con Bash, desarrollando un Script para respaldar una base de datos MySQL automáticamente.
En el ejemplo tenemos una base de datos con nombre crashell_db, el usuario es crashell_user y la contraseña crashell_password. A continuación, comparto el Script completo. Incluye algunos comentarios para describir un poco lo que hacen las instrucciones. Lo puedes modificar y adaptarlo a tu escenario.
#!/bin/bash
# Datos de acceso a MySQL
UserDB="crashell_user"
PassDB="Crashell_Pass*"
DB="crashell_db"
# Ubicación para guardar los respaldos localmente
LocalPath="/Backup/DB"
# Datos de acceso a la cuenta de Mega
UserMega="CorreoMega"
PassMega="ContraseñaMega"
# Ubicación para guardar los respaldos en Mega
RemotePath="Backup/DB/"
# Verificar si el directorio local existe, si no existe se crea
if [[ ! -d "$LocalPath" ]]; then
mkdir -p $LocalPath
fi
# Obtener fecha y hora para nombrar los archivos de respaldo
Date=$(date +"%d-%m-%Y_%H-%M-%S")
# Realizar volcado de base de datos y generar un archivo comprimido
mysqldump -u $UserDB -p$PassDB --add-drop-database --opt --force $DB | gzip -c > $LocalPath/$Date.sql.gz
# Verificar si hay una sesión iniciada en Mega, en caso contrario, se inicia la sesión
Session=$(mega-whoami | grep "$UserMega")
if [[ $Session == "" ]]; then
mega-login $UserMega $PassMega
fi
# Cargar el archivo de respaldo a un directorio remoto en Mega. Si el directorio no existe, se crea.
mega-put -c --ignore-quota-warn $LocalPath/$Date.sql.gz $RemotePath >> /var/log/backup_db.log 2>&1
# Conservar 7 respaldos en la ubicación local, eliminar los más antiguos
MaxBackup="7"
TotalBackup=$(ls $LocalPath | wc -l)
if [[ $TotalBackup -gt $MaxBackup ]]; then
Dif=$(($TotalBackup - $MaxBackup))
Old=$(ls -tr $LocalPath | head -n$Dif)
for i in $Old; do
rm -f $LocalPath/$i
done
fi
Ya tenemos el Script funcionando, pero ejecutarlo manualmente no agrega ningún valor. Lo siguiente es automatizar la ejecución, por lo tanto, vamos a programar una tarea en Crontab.
En primer lugar, es preciso acceder al fichero de Crontab ejecutando lo siguiente:
crontab -e
Posteriormente agregamos la tarea al fichero. En este caso, quiero que se ejecute todos los días a las 23:00 (11 de la noche).
0 23 * * * /Scripts/backup_db.sh
En la actualidad, lo que no lleva automatización le hace falta un ingrediente. Hemos mostrado como hacer copias de seguridad mysql automatizadas y como guardar el respaldo en MEGA, para ello, utilizamos la herramienta de línea de comandos de MEGA y ayudándonos de lo clásico en GNU/Linux, Bash Script y Crontab. Considero que es algo de utilidad, te puede servir cuando tienes una aplicación pequeñas, que puede ser en un VPS y necesitas conservar copias de seguridad de la base de datos en otro lugar seguro.
Evidentemente, el Script es mejorable. Estaré encantado de leer y tus comentarios.
With supporting text below as a natural lead-in to additional content.
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled.