Cargando...

Respaldar base de datos MySQL en Mega

  

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.

Respaldar base de datos MySQL desde la consola

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.

Sintaxis de invocación

Existen tres formas de utilizar mysqldump:

  • Respaldar una base de datos, indicando opcionalmente una o más tablas.
  • Respaldar una o más bases de datos completas.
  • Respaldar todas las bases de datos del servidor MySQL.

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.

La línea de comandos de MEGA

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.

Características principales de MEGAcmd

  • Te permite mover y copiar archivos dentro de tu cuenta de MEGA o entre MEGA y tu PC o servidor, utilizando la línea de comandos.
  • Puedes usar esos comandos para desarrollar Scripts y automatizar tareas.
  • Configurar sincronización en tiempo real o programar copias de seguridad entre una carpeta de tu equipo y tu cuenta de MEGA. Para ello, puedes usar los comandos: sync o backup.
  • Configurar el cliente webDAV de tu preferencia para interactuar con la cuenta de MEGA.

Instalar MEGAcmd en Ubuntu 18.04

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.

  1. Obtener la clave de firma para el repositorio MEGA
curl -fsSL https://mega.nz/keys/MEGA_signing.key | sudo apt-key add –
  1. Agregar el repositorio en el fichero /etc/apt/sources.list
sudo echo deb https://mega.nz/linux/MEGAsync/xUbuntu_18.04/ ./ >> /etc/apt/sources.list
  1. Instalar el paquete
sudo apt update
sudo apt install megacmd -y

Ejemplos:                                                   

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.

Crear Script para respaldar base de datos MySQL

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

Programar tarea en Crontab

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

Concusiones

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.

  • John Doe
    43 Sales$156,24 Totals
    62%
  • Rosy O'Dowell
    12 Leads$56,24 Totals
    32%

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.