Ratio: 3 / 5

Inicio activadoInicio activadoInicio activadoInicio desactivadoInicio desactivado
 

Asumimos que tenemos una carpeta /backup para alojar nuestros backups. Y nuestros scripts estarán /root/scripts/

Primero creamos el script que realizará el dump de las bases de datos. Este nos generará un archivo mysql_xxxxx.sql y otro mysql_xxxxx.log. El primero contendrá el dump de las bases de datos, y el segundo el log, y en ambos casos, "xxxxxx" es la fecha y hora en que se ejecutó el script.


/root/scripts/backupmysql.sh


#!/bin/bash

fecha=`date +%Y%m%d_%H%M`
archivo="mysql_$fecha.sql"
registro="mysql_$fecha.log"

mysqldump --user=root --password=qwerty --all-databases --complete-insert --create-options --verbose 2>/backup/$registro > /backup/$archivo

Lo siguiente, es agregarlo al cron para que se ejecute periódicamente a la hora que necesitemos. Debemos editar el archivo /etc/crontab. Por ejemplo, para ejecutarlo todos los días a las 21 horas:


/etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
0 21 * * * root /root/scripts/backupmysql.sh

De esta manera, todos los días a las 22 horas nbos generará un nuevo .sql y un .log

Si tenemos configurado el acceso por ssh sin contraseña a un segundo server (por ejemplo, con hostname 2doserver, podemos sincronizar los datos con rsync.


/root/scripts/sincrolocalremoto

#!/bin/sh

ORIGEN=/backup/
DESTINO=2doserver:/copia/remoto/ /usr/bin/rsync -avr --delete $ORIGEN $DESTINO

Este script nos sincronizará completamente (de manera incremental) los archivos de nuestro directorio local /backup, en el server 2doserver, dentro de /copia/remoto. Al igual que al script anterior, lo agregamos /etc/crontab para que se ejecute automáticamente. Por ejemplo, asumiento que el backup de mysql demora 30 minutos, podemos ejecutarlo a las 22 horas, para asegurarnos que copiaremos al segundo server hasta el último backup.

El problema que nos queda resolver, es que se nos van acumulando backups y terminaremos llenando el disco. Para solucionar este tema, dentro de /etc/crontab agremamos la siguiente línea, para que el comando find busque los archivos de más de 35 días y los elimine.


/etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
0 21 * * * root /root/scripts/backupmysql.sh
0 22 * * * root /root/scripts/sincrolocalremoto
0 23 * * * root find /backup/mysql* -mtime +35 -exec rm {} \;

Con +35 especificamos la cantidad de días que vamos a mantener.


FacebookMySpaceTwitterDiggDeliciousStumbleuponGoogle BookmarksRedditNewsvineTechnoratiLinkedinRSS FeedPinterest
Pin It