miércoles, 8 de julio de 2009

Copias de seguridad (I)

Hola a todos,

Como trabajador que da soporte a muchos clientes con servidores alquilados no administrados, veo multitud de máquinas con poca o nula gestión de backups. Lo habitual es que el cliente se de cuenta de su error cuando ha perdido todos los datos o cuando tiene que hacer un esfuerzo titánico para recuperar lo que tenia.

Por esto es imprescindible para cualquiera que tenga un servidor online tener programados una serie de backups. Cuanto mas variopintos mejor, desde la propia aplicación hasta un volcado de datos del disco. Lo mas común y básico es crear una tarea que haga un fichero comprimido con el contenido de las carpetas y lo saque por algún método del servidor.

Para esta tarea en concreto el timeline adecuado es :

1. Meter las carpetas que nos interesen en un fichero, si puede ser ya comprimido.
2. Sacarlo del servidor por algún método.

También es posible hacerlo todo a la vez, sin guardar nada en el propio disco, pero lo dejaremos para mas adelante. Para el punto 1 utilizaremos tar:

#tar -czf /backup/nombredestino.tar.gz /carpeta1 /carpeta2 /carpeta3

Este comando nos guardara comprimido las 3 carpetas en el fichero nombredestino.tar.gz en la carpeta backup.
-c --> creamos contenido
-z --> sera comprimido con gzip
-f --> se indica que el resultado se guardara en un fichero (siempre ha de ir al final)

Después para sacarlo podemos utiliza varios metodos, el mas mejor es a través del protocolo SSH, pero esto implica que hay que autentificarse, asi que lo dejaremos para mas tarde.

Una opción fácil, rápida pero poco segura es por ftp, el único problema es que para automatizarlo habría que crear un script un poco mas completo. Otra solución es utilizar "lftp", un software que añade funcionalidades extra al cliente ftp de consola y con el que podemos hacer todo en una sencilla linea:

#lftp -c open -e "put /backup/nombredestino.tar.gz" -u user,password ftp.nombredominio.com;

Con esto ya habremos copiado el fichero al ftp que debe existir en ftp.nombredominio.com con user y password. Ahora para automatizarlo solo tenemos que crear un shell script que incluya estos dos comandos:

#Backup_sencillo.sh
*****
#!/bin/bash
tar -czf /backup/nombredestino.tar.gz /carpeta1 /carpeta2 /carpeta3
lftp -c open -e "put /backup/nombredestino.tar.gz" -u user,password ftp.nombredominio.com;
*****

Y añadir una tarea a cron para que la ejecute:

#crontap -e

añadimos:

2 3 * * * sh /Backup_sencillo.sh >/dev/null

Guardamos

Y ya tenemos el backup programado para cada dia a las 03:02 de la madrugada.

Efectivamente esto se puede mejorar muchisimo (pero mucho), y es lo que iremos haciendo en la serie de Post "Copias de seguridad(*)"..

Poco a poco iremos convirtiendo nuestra pequeña criatura en un formidable script que no solo te avise de los fallos por correo, sino que ademas sea eficiente con el ancho de banda, que se haga al vuelo, que se mantengan copias de varios dias, que vaya cifrado, etc, etc...

Gracias a todos, Saludos.

Seguir leyendo...