Cómo hacer backups con MySQL

Cuando una aplicación entra en producción (si no antes), resulta clara la necesidad de realizar backups.

Aunque tu código sea una obra de arte digna del Louvre, lo realmente importante son los datos que generan los usuarios.

Por más que estés usando hostings virtualmente irrompibles (Como Digital Ocean), nunca podés ser demasiado precavido.

Hay varias formas de resolver este problema, voy a nombrar algunas (De más fácil a más compleja).

Cómo hacer backups usando MySQL WorkBench

Desde la pantalla principal (Una vez conectado a un servidor)

Arriba a la izquierda encontrás el menú «Management»:

De ahí tenés la opción «Data Export»:

Eso te lleva a la pantalla de selección de los objetos que vas a querer exportar:

Seleccioná la base de datos y las tablas:

Importante: seleccioná la opción «Export to self contained file»:

De otro modo, la exportación se hará a un archivo por tabla (Lo que simplemente complicará el proceso de restauración).

Por último, debés iniciar el proceso de exportación:

Y listo! Lo que obtendrás será un archivo con las instrucciones SQL para crear tu base de datos tal y como está en tu servidor:

Este proceso es simple pero tiene dos inconvenientes principales:

  1. Es un proceso manual (Es decir, alguien debe acordarse de hacerlo)
  2. Sólo funcionará si tenés disponible una terminal gráfica (O acceso remoto usando una, lo cual es algo poco usual).

Cómo hacer backups usando MySQLDump

Una herramienta que viene dentro del paquete MySQL es MysqlDump.

Se trata de una sencilla utilidad de línea de comandos cuyo objetivo es simplemente realizar volcados (dumps) de bases de datos.

Si alguna vez usaste el cliente de línea de comandos de MySQL (el comando mysql), la forma de utilización de mysqldump no debería resultarte ajena: se especifica el servidor, la base de datos y algunas opciones más:

Y se obtienen las sentencias sql requeridas para crear una base de datos igual que la que tenemos ahora:

Claro que… no es muy útil tenerlo todo en la pantalla, ¿cierto?

¡A no preocuparse! Basta con redireccionar la salida standar y estás listo:

Y si querés hacer algo realmente bueno podés usar un poco más de la magia de POSIX y hacer algo como:

Y terminar con un archivo comprimido con la fecha de hoy como parte del nombre como para identificarlo rápidamente.

Este enfoque sigue siendo manual pero:

  1. No requiere de consola gráfica (Es más probable que no tengas problemas para usarlo en tu servidor)
  2. Es fácilmente scripteable

El último punto es lo que permite justamente sacar de la ecuación a los humanos:

Cómo automatizar los backups de la base de datos

Si conocés la utilidad cron te habrás imaginado ya que la verdadera potencia de este esquema está en la realización automática (y periódica) de los backups.

Así que, si te tomás el trabajito de crear un script con el comando como el que estaba antes:

Le das permisos de ejecución:

chmod +x backup.sh

Y lo ponés dentro de un cronjob:

Ya te podés olvidar de entrar a hacer los backups al servidor.

No está mal, ¿cierto? ¿Qué falta? ¡Ah! Sí… ¿dónde deberías guardar los backups?

Cómo almacenar los backups en Google Drive

Si llegaste hasta acá debe ser que te interesa mucho tener bien resguardada la información de tus clientes.

La frutilla del postre es, aparte de realizar los backups en forma automatizada, almacenarlos en algún lugar seguro (Distinto de tu hosting).

Existen varias alternativas, pero una bastante al alcance de cualquiera es usar una cuenta de Google o Office 365.

Con este script guardamos los backups de las últimas 5 semanas en nuestra cuenta de Google (Todo gracias a la ayudita de un cliente de GoogleDrive para línea de comandos).

#!/bin/bash
backup_dirs='/var/lib/mysql'
today=`date -I`
backup_gdrive_path='/opt/backups/'

tar -zcf ${backup_gdrive_path}/prod-${today}.tgz $backup_dirs
old_backups=`ls -1r $backup_gdrive_path | awk 'NR <= 5 { next} { print }'`

if ! [ "$old_backups}x" == "x" ]; then
 for f in $old_backups; do
 rm -f ${backup_gdrive_path}/$f
 done
fi

cd $backup_gdrive_path
drive push -no-prompt -quiet
drive emptytrash -no-prompt -quiet

Y por supuesto… ¡no olvides ponerlo como cronjob!

Y ahora sí, tenés todo lo necesario para montar un sistema de backups remotos automatizados para tu sitio.

mchojrin

Por mchojrin

Ayudo a desarrolladores PHP a afinar sus habilidades técnicas y avanzar en sus carreras

¿Te quedó alguna duda? Publica aca tu pregunta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.