Cómo hacer backups con MySQL

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

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

Por otro lado, seguro que el código de la aplicación que hiciste es una obra de arte digna del Louvre, pero, lo realmente importante son los datos que el cliente genera con ella (¡al menos para él!).

Hay varias formas de resolver este problema, voy a nombrar algunas en orden de simplicidad decrecreciente (Es decir, empiezo por la más fácil 🙂 ):

Cómo hacer backups usando MySQL WorkBench

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

Arriba a la izquierda encontramos el menú «Management»:

De ahí tenemos la opción «Data Export»:

Eso nos lleva a la pantalla de selección de los objetos que vamos a querer exportar:

Donde seleccionaremos la base de datos y las tablas (Generalmente querremos exportar todas las tablas que componen nuestra base).

Importante: seleccionar 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, debemos iniciar el proceso de exportación:

Y listo! Lo que obtendremos será un precioso archivo con las instrucciones SQL para crear nuestra base de datos tal y como está en nuestro servidor:

Este proceso es simple pero tiene dos inconvenientes principales:

  1. Es un proceso manual (Es decir, alguien debe acordarse de hacerlo… ¡y hacerlo!)
  2. Sólo funcionará si tenemos disponible una terminal gráfica (O acceso remoto usando una… 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 estamos listos:

Y si queremos hacer algo realmente piola podemos usar un poco más de la magia de POSIX y hacer algo como:

Y terminar con un lindo 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… De poco sirve tener una copia de la base de datos como estaba hace tres meses.

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 guardamos los backups?

Cómo almacenar los backups en Google Drive

Si llegaste hasta acá veo que te interesa mucho tener bien resguardada la información de tus clientes, te felicito 🙂

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

Existen varias alternativas, pero una bastante al alcance de cualquiera (De cualquiera que esté leyendo esto quiero decir) es usar una cuenta de Google (Total… ¡son gratis!).

Voy a dar por hecho que sabés cómo crear una cuenta de Google y vamos directo a lo importante.

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 un precioso sistema de backups remotos automatizados.

Si querés conocer más sobre MySQL no dejes de mirar este curso.

mchojrin

Por mchojrin

Ayudo a desarrolladores PHP a acceder mercados y clientes más sofisticados y exigentes

¿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.