Cargando...
Bell ebd1aeb62c1e040000a83aada46205de3ccee6af4ca11163e07f7b64f057875d Notificaciones

Marcar todas como leídas

Ver más

Realizar respaldo automático de base de datos.

Eduardo GPG.

Twitter black efdb1623688b2a14a7705d191dbbe0265332efb257756a714f7fb5403f5e782c @eduardo_gpg

Siempre respaldar nuestros datos.

Cuando nos encontramos en proyectos que se encuentran en producción debemos ser sumamente cuidadosos al momentos de realizar ciertas sentencias, más a un cuando tenemos privilegios para ejecutar updates o deletes (ya no digamos drops). 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 de poder realizar un respaldo de nuestra base de datos. Una de las más comunes es dejárselo todo la manejador de base de datos, programarlo para que realizar esta acción cada cierto tiempo.

Los respaldos son muy importantes, depende de nuestras necesidades realizar una cada fin de semana, cada día o incluso cada hora.

En este post vamos a ver una forma diferente de realizar un respaldo para nuestra base de datos en MySQL para equipos con sistema unix. Lo que haremos es algo sumamente sencillo pero muy útil, realizaremos un script y nos apoyaremos de cront para que se ejecute automáticamente.

Script.

Para este post necesitamos una base de datos de prueba, Nada en producción por ahora.

Lo primero es crear nuestro archivo principal, en mi caso lo llamare back_up.sh, dentro de este archivo colocamos las siguientes variables.

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

Las tres primeras lineas nos ayudarán a poder tener accesos a nuestra base de datos a la cual queremoes realizar el respaldo. Por otro lado la cuarta linea es la ruta en donde se guardará la respaldo. En este caso como observamos no especificamos una ruta. En caso si lo deseemos podemos modificarlos sin ningún problema como el siguiente ejemplo.

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 la funcion mysqldump realizamos un respaldo de la base de datos especificada. Muy claro de entender, podríamos traducirlo como :

Con este usuario y 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 memoria, es por eso que ahora a nuestro script debemos de decirle que comprima nuestro respaldo. Para ellos agregamos la siguiente linea de código

gzip $FINAL_OUTPUT

Al final tendríamos este código

#!/bin/bash

USER="root"
PASSWORD=""
DATABASE="test"

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

A probar nuestro respaldo.

Ejecutamos el script, en mi caso sería así

./back_up.sh

Ahora tendremos que tener una archivo comprimido en la ruta de salida que especificamos. Todo bien hasta ahora :D Pero ¿Cómo compruebo que el respaldo es correcto? Para comprobar esto realizar unos pequeños queries, quizás algún delete o un drop ;)

Descomprimimos nuestro archivoy lo abrimos para verificar como se hizo el respaldo. SI este no contiene en las primera lineas

use tu_base_de_datos;

es necesario que lo agreguemos.

Ejecutamos el siguiente código en nuestra terminal

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

con esto tendremos nuestro base de datos como hace unos minutos, ya no es necesario indicarle que base de datos usar ya que ahora contiene esa información :D

Cron.

Ya sabemos que nuestro script para realizar el respaldo funciona, y que si podemos hacer uso de él, ahora el gran problema es que no podemos estar ejecutando eso todos los días a la misma hora, imposible para un desarrollador, es por ello que vamos a apoyarnos del daemon cron de nuestro sistema. Cron nos permitirá ejecutar nuestro script automáticamente el tiempo que necesitemos. para logra esto necesitamos ejecutar en nuestra terminal el siguiente comando.

crontab -e

el cual nos abrirá un documento (ya sea con nano o con vim) el cual estará disponible para su edición, aquí es donde podemos programar todo lo que deseemos. Para este post colocamos lo siguiente para que nuestro documento se ejecute todos los día a las 11 de la noche.

00 23 * * * /Users/eduardo/Documents/BackUpDataBase/backup_database.sh

Dejen les explico como funciona esto. Como podemos observar la nueva linea de compone de seis bloques separados por un espacio. Aqui si explicación de cada uno, comenzando 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

y como podemos observar tenemos los días del mes, el mes y los días de la semana con asterisco (*) eso quiere decir que quiero que se ejecute todos los 365 días del año) y claro quiero que ejecute este archivo, y le paso donde esta posicionado mi script.

Para listar nuestras acciones basta con ejecutar

crontab -l

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

Repito para pruebas como estas no debemos de usar nuestro servidor.

Inicia sesión o Crea una cuenta

para responder esta duda

10 Respuestas

 
¡0 Gracias! Heart border ce2b9c07501b6deb68d6773b62a241076453845b9ae45730a8ae4ab50721cdaf

 

 

r0a
 

Muy buen articulo