Now Reading
Cómo automatizar los Backup de MySQL con un script y Crontab
0

Cómo automatizar los Backup de MySQL con un script y Crontab

by Ignacio Van Droogenbroeck23 diciembre, 2015

Hacer backup de las bases de datos es primordial en estos días donde hay tantas cosas dando vuelta y que afectan a nuestras bases. Me refiero a plugins, querys y demás yerbas que se programan para los diferentes sistemas tales como WordPress, Magento, Drupal, etc.

Particularmente me gusta automatizar este tipo de tareas con Crontab pero me faltaba el script para poder hacerlo bien completo. Navegando, encontré este post de Simon Davies donde escribió un script bastante completo para poder hacer los backups.

El código en cuestión es el siguiente:

#!/bin/bash

# Database credentials
user=""
password=""
host=""
db_name=""

# Other options
backup_path="/path/to/your/home/_backup/mysql"
date=$(date +"%d-%b-%Y")

# Set default file permissions
umask 177

# Dump database into SQL file
mysqldump --user=$user --password=$password --host=$host $db_name > $backup_path/$db_name-$date.sql

# Delete files older than 30 days
find $backup_path/* -mtime +30 -exec rm {} \;

Ahora bien, veamos que quiere decir todo esto:

# Database credentials
user=""
password=""
host=""
db_name=""

En esta parte debemos definir los datos de la base, tal como el usuario que se va a conectar, la contraseña, donde está la base, puede ser localhost u otro host y la base de datos.

# Other options
backup_path="/path/to/your/home/_backup/mysql"
date=$(date +"%d-%b-%Y")

Acá indicamos donde va a guardarse la base de datos y los parametros que va a agregar a los archivos, en este caso, la fecha, en un formato específico. Esto se hace así para que el backup del día siguiente no se pise con el anterior.

# Dump database into SQL file
mysqldump --user=$user --password=$password --host=$host $db_name > $backup_path/$db_name-$date.sql

Acá esta el dump, que va a usar los parametros antes descriptos para hacer la tarea. No lo debemos editar.

# Delete files older than 30 days
find $backup_path/* -mtime +30 -exec rm {} \;

Por último, el script indica que los archivos que tengan más de 30 días de creados se borrarán. Si no queremos guardar un historial tan grande, podemos reducir la cantidad de días.

Ahora bien, si a esto lo combinamos con un rsync o duplicity no solo podríamos hacer el backup en nuestro equipo local sino que lo podríamos llevar a servicios como IncusDrive Backup, en ese caso, tendríamos un backup offsite.

Y no solo eso, si lo programamos con un Crontab, automatizaríamos la tarea completamente. En mi caso particular, el cron está generando de la siguiente manera:

MAILTO=ignaciovd@xxx.com
30 4 * * * sh /backups/mysqldump.sh

Esto quiere decir que se va a ejecutar todos los días a las 4:30 AM y donde está el archivo .sh ya que, este script debemos guardarlo y hacer que sea ejecutable para que el cron lo pueda correr sin problemas.

Como ven, no es complicado y espero que les sirva este script, a mi me vino al pelo, de hecho estoy jugando con él para armar toda una interfaz que permita hacer backups manual o automática pero como un sistema totalmente independiente. Ya les mostraré como queda. Felices fiestas.

What's your reaction?
Buenísimo, Gracias.
75%
WTF
0%
Contante otro
0%
Ufff
25%
About The Author
Ignacio Van Droogenbroeck
Profesional con casi 15 años de experiencia trabajando para empresas de servicios, multinacionales de software, telcos y mayoristas de valor agregado. Espero te guste lo que escribo y hago.

Leave a Response

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