InicioLinuxHacer un "Backup SQL" en GNU/Linux

Hacer un "Backup SQL" en GNU/Linux

Linux9/12/2012
Script para generar backup por cada base de datos



Una de las cosas que debe tener un desarrollador, es una política propia de Backup ya sea de archivos o de base de datos. Ni hablar en un sitio en producción, esto debe existir si o si, así evitar una catástrofe de grandes proporciones ya sea por culpa del humano/maquina (el primero es mas común ).

En mi caso, no me ocupo de los servidores de producción pero si hago un backup en las pc’s donde desarrollo, esto me puede ahorrar muchas horas de trabajo y dolores de cabeza ante un imprevisto.

En esta ocasión, les traigo un sencillo script que crea un fichero (con compresión gzip) por cada base de datos mysql en el sistema.

Me dirán, pero si existe el la opción de mysqldump –all-databases. Claro, pero esto te genera un único fichero que contiene todas las bases de datos. Dos puntos en contra de esta ultima opción es, si tenemos muchas DB se genera un fichero sumamente grande y cuando deseemos importar una DB en particular nos obliga a importar todas las demás.

#!/bin/bash
BACKUPUSER="guido"
BACKUPDIR="/home/$BACKUPUSER/backup/mysql"
BACKUPDATEDB=$(date +%Y%m%d_%H%M%S)
BACKUPDATE=$(date +%Y%m%d)

DBUSER="root"
DBPASS="guido"

mkdir -p $BACKUPDIR/$BACKUPDATE

for DB in `mysql -u $DBUSER -p$DBPASS -e "SHOW DATABASES" | grep -v Database`;
do
    echo -n "BACKUP $DB DATABASE..."
    mysqldump -u $DBUSER -p$DBPASS $DB | gzip > "$BACKUPDIR/$BACKUPDATE/$DB-$BACKUPDATEDB.sql.gz";
    echo "OK"
done

chown -R $BACKUPUSER:$BACKUPUSER $BACKUPDIR/$BACKUPDATE


El script se puede mejorar a gusto del consumidor, por ejemplo podemos agregar un par de lineas y borrar X directorios a partir del día de la fecha así ahorrar espacio en el disco.

Este script lo ejecuto todos los días mediante cron, y asi todos los dias tengo un backup de las base de datos en las que trabajo sin mas que prender la computadora


Crontab

El crontab, es un archivo en donde podemos configurar tareas para que se ejecuten automáticamente en nuestro sistema, digamos por ejemplo descargar un archivo de respaldo diariamente, o borrar ciertos archivos periódicamente, ejecutar un script que haga algo, etc, digamos que podemos automatizar las tareas, para no estar haciéndolas a mano.

Para poder ejecutar el crontab, regularmente no es necesario hacer nada, mas que ejecutar cierto comando y ya estará funcionando, en la mayoría de distribuciones que he probado (ubuntu,open suse, debian, gentoo)regularmente esta por default, de todos modos si surgen dudas están los comentarios.

También debemos de revisar que para poder ejecutarlo nuestro nombre de usuario debe de aparecer en /usr/lib/cron/cron.allow, o en dado caso que no aparezcamos dentro de la lista /usr/lib/cron/cron.deny.
Si sólo existe cron.deny y está vacío, todos los usuarios pueden utilizar crontab. Si no el archivo existe, sólo el usuario root puede usar crontab. El permitir / denegar archivos constan de el nombre de usuario en cada línea.
Lo anterior no lo pude localizar correctamente en Open suse, de todos modos, utilicen en este caso acceso como root y se evitaran problemas.
Ahora para poder trabajar con el cron vamos a ver como podemos configurarlo o modificarlo.
Podemos usar linux-g5yh:/home # export EDITOR = vi para especificar un editor por default para editar el archivo del crontab, pueden usar pico, nano, etc, pero a mi me gusta mas el Vim o Vi
Ahora usaremos los siguiente comandos dependiendo de lo que deseemos hacer

Con este comando podremos editar nuestro archivo crontab, si no existe dicho archivo se crea.

linux-g5yh:/home #crontab-e
Muestra el contenido del archivo crontab.

linux-g5yh:/home #crontab-l
Eliminar el archivo crontab(ejecutar esta instrucción con cuidado).

linux-g5yh:/home #crontab-r
Muestra la última vez que editó su archivo crontab. (Esta opción sólo está disponible en algunos sistemas.)
Ahora que ya sabemos como configurar el archivo del crontab, ahora veamos como podemos agregar tareas, a dicho archivo

linux-g5yh:/home #crontab-v
.



*     *   *   *    *  comando_a_ejecutar
-     -    -    -    -
|     |     |     |     |
|     |     |     |     +—– dia de la semana (0 – 6) (Domingo=0)
|     |     |     +——- mes(1 – 12)
|     |     +——— dia del mes (1 – 31)
|     +———– hora (0 – 23)
+————- minuto (0 – 59)




Bajo el anterior criterio vamos a poner un cron job que se ejecute a las 10 de la noche, el cual solo reinicia el apache server

linux-g5yh:/home #crontab-e
* 10,20  *  *  * /etc/init.d/apache2 restart
:wq //guardamos el archivo en el vi

linux-g5yh:/home #

Ahora un ejemplo un poco mas difícil, bajar un respaldo a las 2:20 am y a las 2:20 pm, bajar un segundo respaldo 25 minutos después, ejecutar el script de los respaldos cada 30 minutos los viernes.

linux-g5yh:/home #crontab-e
20 2,14  *  *  *  wget http://www.tudominio.com/logs/respaldo.backup

45 2,14  *  *  *  wget http://www.tudominio.com/logs/respaldo.backupSegundo

30 *  *  *  5  http://www.tudominio.com/generarrespaldos.php

:wq //guardamos el archivo en el vi

linux-g5yh:/home #

Listo con esto creo que ya podemos empezar a trabajar con nuestro cronjob.


Video Tutoríal



Datos archivados del Taringa! original
61puntos
636visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
0visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

No hay comentarios nuevos todavía

Autor del Post

a
Usuario
Puntos0
Posts19
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.