Tengo un servidor el cual administro de forma remota y estuve buscando una forma sencilla para que el mismo servidor hiciera los backups y mi propio ordenador los descargara de forma automática y segura.
Opté por usar herramientas comunes y sencillas, además preferí usar backups totales y no diferenciales personalizables para cada parte del sistema, ya que por ejemplo no me interesaba hacer un backup diario del directorio "/etc/" pero sí de las bases de datos. A continuación explico cómo lo hice.
Lo primero será crear un usuario para que almacene los backups, usando el programa "adduser" creé el usuario "backup-user".
user add backup-user mkdir /home/backup-user mkdir /home/backup-user/last chown backup-user /home/backup-user -R chmod o=-rwx,g=-rwx /home/backup-user -R
No se os olvide asignar un password al nuevo usuario con "passwd".
Para empezar con el backup del directorio /home creé el siguiente script de bash:
/usr/local/bin/home-backups
#!/bin/bash DEST="/home/backup-user/" ORIG="/home/" FICH=home-$(date +%Y%m%d).tgz tar cvvzfP $DEST$FICH $ORIG --exclude=/home/mldonkey/.mldonkey/incoming --exclude=/home/comun --exclude=/home/backup-user cd /home/backup-user chown backup-user * -R ln -sf $DEST$FICH /home/backup-user/last/home-last.tar.gz
Lo que hace básicamente es crear un fichero tar.gz de nombre "home-" seguido de la fecha en la que se creó el archivo. También se puede observar como excluir ciertos directorios que no nos interesan en el backup. A continuación mueve el fichero creado a la carpeta del usuario que creamos antes, "backup-user" y asigna a este último como propietario. Para terminar, vemos que crea un enlaces simbólico a /home/backup-user/last/ del fichero recién creado, ya explicaré luego el por qué.
Con este mismo sistema se pueden crear diferentes scripts para diferentes directorios de los cuales queramos realizar el backup.
Para las bases de datos de MySQL, creé otro script similar:
/usr/local/bin/mysql-backups.sh
#!/bin/bash DEST="/home/backup-user/" FICH=mysql-$(date +%Y%m%d).tgz mysqldump --opt -u root -ptupassword --all-databases | gzip > $DEST$FICH cd /home/backup-user chown backup-user * -R ln -sf $DEST$FICH /home/backup-user/last/mysql-last.tgz
La estructura es similar al script "home-backups". No olvidéis sustituir "tupassword" por el password de vuestra base de datos para el usuario root.
Para terminar, sólo falta añadir dos entradas a CRON para automatizar la ejecución de estos scripts. Yo elegí hacer un backup del home el día 1 de cada mes, y un backup de las bases de datos a diario.
crontab -e
0 4 * * * /usr/local/bin/mysql-backups 0 4 1 * * /usr/local/bin/home-backups
Ya tenemos lista la parte de realizar los backups automáticos en nuestro servidor, ahora sólo falta la parte de automatizar la obtención de ellos.
Para ello tenemos que autorizar el login remoto del usuario backup-user a través de ssh (/etc/ssh/sshd_conf). Una vez autorizado, nos interesa no tener que usar clave para acceder a ese usuario para ello os recomiendo que sigáis el siguiente artículo http://bulma.net/body.phtml?nIdNoticia=2190.
Una vez hemos comprobado que podemos hacer ssh maquina_remota -l backup-user y acceder sin necesidad de clave, sólo nos falta añadir a nuestro CRON la siguiente línea:
00 12 * * * scp -pr "backup-user@maquina_remoto:/home/backup-user/last/" ~/
Con ello descargaremos automáticamente los últimos backups (contenidos en "last", de ahí la anterior creación de este directorio) generados por nuestro servidor a el directorio "~/last" de nuestro "home" todos los días a las 12 de la mañana, conservando la fecha de creación del archivo y sobreescribiendo archivos antiguos.
Ahora sólo nos faltaría una forma automática para deshacernos de los backups antiguos en el servidor, acepto sugerencias :).
Comentarios
Yo lo haria, haciendo un
Yo lo haria, haciendo un script de la siguiente forma:
scp -pr "backup-user@maquina_remoto:/home/backup-user/last/" ~/
ssh backup-user@maquina_remoto "rm -rf /home/backup-user/last/*"
y llamándolo desde el crontab
Saludos
Enviar un comentario nuevo