arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

Realizar respaldo automático de base de datos.

Eduardo Ismael Garcia

Full Stack Developer at Código Facilito.

av_timer 3 Min. de lectura

remove_red_eye 167544 visitas

calendar_today 11 Abril 2016

Cuando nos encontramos trabajando en proyectos los cuales se encuentran en producción, es decir, ya existan usuarios reales utilizando el producto, debemos ser sumamente cuidadosos al momentos de ejecutar ciertas sentencias SQL, más aún, cuando tenemos privilegios de administrador, donde podemos ejecutar sentencias que modifiquen el contenido de las tablas, Insert's, Update's o Delete's.

Se cuentan historias de desarrolladores que olvidaron colocar el Where a uno que otro update o simplemente ejecutaron shema en producción (lo he visto). Afortunadamente existen diversas formas en las cuales podemos realizar un respaldo de nuestra información.

En este post veremos una forma en la cual podemos realizar un respaldo de nuestra base de datos. Trabajaremos con el gestor de base de datos MySQL a través de un sistema operativo basado en unix.

Lo que haremos es algo sumamente sencillo, pero muy útil. Crearemos un script el cual realice el respaldo de la base de datos y mediante CRONT programaremos que el script se ejecute de forma automática cada cierto tiempo.

Script.

Para este post necesitamos una base de datos de prueba.

Lo primero que haremos es crear el script. En mi caso tendrá por nombre backup.sh.

Una vez con el archivo, colocamos las siguientes líneas de código.

USER="usuario"
PASSWORD="password123"
DATABASE="test"
FINAL_OUTPUT=`date +%Y%m%d`_$DATABASE.sql

Las tres primeras líneas nos permitirán realizar la conexión con nuestra base de datos.

La cuarta línea será la ruta en donde queremos que se guarde el respaldo. Los respaldo se harán a través de archivos con extensión .sql. En este caso el nombre de mi respaldo será la fecha del día de hoy, seguido del nombre de la base de datos.

Ejemplo

20180629_test.sql

Si yo dejo la línea la última línea como la tenemos ahora, el respaldo se hará en el mismo lugar donde se encuentra el script. Si nosotros así lo deseamos podemos colocar una ruta diferente.

FINAL_OUTPUT=my/nueva/ruta/`date +%Y%m%d`_$DATABASE.sql

Ahora si, la linea más importante.

mysqldump --user=$USER --password=$PASSWORD $DATABASE > $FINAL_OUTPUT

Con el programa mysqldump realizamos el respaldo de la base de datos. La sentencia es clara de entender. Pudiésemos traducirla como:

Con este usuario, junto con esta password quiero que realices una respaldo de esta base de datos y lo almacenes en esta ruta.

En el cien por ciento de los casos nos interesa que nuestro servidor no se quede sin espacio en memoria, es por eso que una vez el respaldo se haya realizado, comprimimos el archivo .sql.

gzip $FINAL_OUTPUT

Al final del día nuestro script quedaría de la siguiente manera. Claro tú debes de modificar los valores según tus necesidades.

#!/bin/bash

USER="usuario"
PASSWORD="password123"
DATABASE="test"

FINAL_OUTPUT=eduardo/`date +%Y%m%d`_$DATABASE.sql
mysqldump --user=$USER --password=$PASSWORD $DATABASE > $FINAL_OUTPUT
gzip $FINAL_OUTPUT

Prueba

Ejecutamos el script.

./back_up.sh

Ahora debemos de tener una archivo comprimido en la ruta de salida que especificamos. Todo bien hasta ahora 😎.

Pero ¿Cómo compruebo que el respaldo es correcto? para ello debemos de realizar unos pequeños queries 🦕.

Primero descomprimimos nuestro archivo. Si este no posee en las primera líneas use tu_base_de_datos; será necesario que lo agreguemos.

Una vez hecho esto podemos alterar nuestra base de datos como lo deseemos. Podemos eliminar un par de registros, actualizarlos, eliminar tablas, crear nuevas, vaya no lo sé, deja que tu imaginación fluya.

Posteriormente, una vez hayamos terminado de modificar la base de datos, ejecutamos la siguiente sentencia en nuestra terminal.

$ mysql --user=$USER --password=$PASSWORD < $NOMBRE_ARCHIVO_RESPALDo.sql

Con esto estamos indicamos que se aplique el respaldo a nuestra base de datos 😯.

Cron.

Ya sabemos que el script funciona, sin embargo, qué pasa si queremos tener un respaldo todos los días a las 11 am (es un ejemplo) en ese caso alguien tendría que ejecutar el script todos los días a esa misma hora. Esto sin duda es algo tedioso, es por ello que vamos a automatizar esta tarea. Para ellos nos vamos a apoyar de un demonio que posee nuestro Sistema operativo, cron.

Cron nos permite ejecutar tareas de una forma programada.

Lo que haremos es agregar una nueva tarea. Para ello ejecutamos la siguiente sentencia en nuestra consola.

crontab -e

crontab con la bandera -e nos abrirá un documento (ya sea con nano o con vim) el cual estará disponible para su edición. Es aquí es donde podemos agregar nuevas tareas.

Para este post colocamos lo siguiente línea.

00 11 * * * /ruta/donde/se/encuentra/backup_database.sh

Dejen les explico como funciona esto. Como podemos observar la nueva línea se compone de seis bloques, bloques separados por un espacio. Los bloques los leeremos de de izquierda a derecha.

  • Minutos (un rango de 0 al 59)
  • Hora (En formato 24hrs)
  • Días del mes (del a 1 al ... depende del mes)
  • Mes (1 al 12)
  • Días de la semana (0 al 6, siendo el 0 domingo)
  • Acción a ejecutar

La acción a realizar será la ejecución de nuestro script.

Al nosotros colocar * indicamos que la acción se realizará todos los días de la semana y del mes, los 365 días del año.

Una vez agregada la tarea, salimos del editor.

Para listar nuestras acciones basta con ejecutar

crontab -l

Cualquier duda, comentario o aclaración podemos usar la caja de comentarios 😋.

Conclusión

Los respaldos son de suma importancia en nuestras aplicaciones, es mucho mejor prevenir que lamentar. Es por ello que siempre recomiendo realizar respaldo periódicamente, dependiendo de tus necesidades puedes realizar respaldos cada semana, día o inclusive cada hora 🍺.