->
Si tienes tu web alojada en un servidor ajena por el que estás pagando te recomiendo las siguientes acciones para tener seguridad para tener la mejor copia se seguridad de tu servidor.
1.- Lo primero es que crees un script que haga un backup de los bases de datos en .sql y luego las comprimas todas en un tar con compresión bz2. Evita poner esta carpeta en alguna zona accesible de la web. Un ejemplo podría el mío: lo llamaré DB_bak.sh (y le daré permisos de ejecución: chmod +x DB_bak.sh ). En el ejemplo está creada la carpeta DB-bak dentro de nuestra carpeta de usuario.
#!/bin/sh cd ~/DB-bak mysqldump -u usuario -pcontraseña -h hosting_DB base_de_datos1 > base_de_datos1_`date +%Y-%m-%d`.sql mysqldump -u usuario -pcontraseña -h hosting_DB base_de_datos2 > base_de_datos2_`date +%Y-%m-%d`.sql mysqldump -u usuario -pcontraseña -h hosting_DB base_de_datos3 > base_de_datos3_`date +%Y-%m-%d`.sql tar cvpfj DB_`date +%Y-%m-%d`.tar.bz2 *.sql rm *.sql
donde usuario es tu usuario y contraseña la contraseña de tu usuario de MYSQL, hosting es la IP o nameserver de tu acceso a MySQL desde tu hosting (puede ser algo como 192.168.2.X ó 192.168.1.X ó mysql.dominio.com) y base_de_datosX es la base de datos MySQL.
Para restaurar una base de datos: Primero extraemos la base de datos del comprimido y luego la restauramos
mysql --password=contraseña --user=usuario base_datos -h 192.168.2.7 < base de datos.sql
La base de datos tiene que estar previamente creada y enlazada con dicho usuario dándole todos los permisos. Para ello usar el panel del hosting.
2.- Ahora crearemos un comando que borrará las bases de datos creadas hace más de 30 días del servidor para evitar basura innecesaria. Lo llamaremos rm_obsoletas.sh y le daremos permisos de ejecución: chmod +x rm_obsoletas.sh
#!/bin/sh
cd ~/DB-bakfind ./ -type f -mtime +30 -exec rm {} ;
3.- Crearemos ejecuciones automáticas y programadas de estas actividades. Las bases de datos las guardaremos a las 22:00 de cada día mientras que eliminar las obsoletas lo haremos cada semana (tampoco es necesario gastar demasiados recursos en eso):
Para ello, nos dirigimos a nuestro panel de control si éste permite añadir actividades de tipo UNIX (en crontab) o bien nos logueamos por ssh (un ejemplo sería: ssh usuario@dominio.com aunque es posible que tengáis que elegir el puerto con el comando -p puerto).
Una vez logueados añadimos las programaciones:
crontab -e
Añadimos lo siguiente:
# m h dom mon dow command * 22 * * * ~/DB-bak/DB_bak.sh * * 7 * * ~/DB-bak/rm_obsoletas.sh
4.- Después tendremos que ejecutar rsync y programarlo para que a las 23:00 de cada noche se descargue todos los datos del servidor y borre de nuestro ordenador los archivos que han sido borrados del servidor. Haremos que sólo se descarguen los archivos modificados o nuevos, lo que consumirá poco nuestro ancho de banda de nuestra conexión y del servidor.
Pero antes tendremos que hacer que no nos pida la contraseña cada vez que ejecutemos ssh (secure shell) para poder automatizar el proceso. Para esto tendremos que crear un par de claves cifradas del siguiente modo:
En nuestro ordenador abrimos una terminal y ejecutamos:
ssh-keygen -t dsa
Nos dirá donde queremos ubicarlas, aceptad donde se os marque. Después la añadiremos en nuestro PC a las claves que tenemos:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
Ahora haremos lo mismo en el servidor. Primero subimos el archivo ~/.ssh/id_dsa.pub a nuestro servidor en la misma carpeta (si no existe la carpeta .ssh la creamos). Luego nos registramos en ssh y la copiamos a .ssh/authorized_keys:
ssh usuario@dominio.com
Recordar lo que dije del puerto y que tenéis que haber subido por ftp el archivo id_dsa.pub creando la carpeta .ssh previamente en tu carpeta de usuario.
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
Cerraremos la terminal y comprobaremos que ya no necesitamos la contraseña para meternos por ssh: ssh usuario@dominio.com
Si no funciona repasar este último punto hasta que funcione.
5.- Por último simplemente creamos el comando de descarga de archivos y haremos que se programe para las 23:00 cada día:
Creamos un archivo llamado rsync_bak en tu carpeta de usuario:
nano ~/rsync_bak
Metemos el siguiente contenido, entendiéndolo y modificándolo a nuestro gusto:
#!/bin/bash cd ~/ rsync -e ssh -avzu --delete usuario@dominio.com:~/ --exclude=logs --exclude=.n* backup_servidor/
Como véis primero se pone de donde se copia (usuario@dominio.com:carpeta y al final donde se copia (en la carpeta ~/backup_servidor de nuestro disco duro que no tiene que estar creada anteriormente). El comando -u hace que sólo bajemos los archivos modificados y el –delete hace que borremos los archivos que tengamos en nuestra carpeta y que hayamos borrado del servidor. Por otra parte los –exclude=carpeta harán que no tengamos en cuenta los archivos o carpetas indicados (importante excluir los archivos .n* porque sino crearemos un bucle infinito al necesitarse en ciertos backups, aunque tal vez, de este método no haga falta… no sé cómo comprime las listas rsync)
Si cada vez que ejecutamos rsync necesitamos añadir un puerto específico o alguna opción se haría cambiando la línea de rsync del script por:
rsync -e "ssh -p puerto" -avzu --delete usuario@dominio.com:~/ --exclude=logs --exclude=.n* backup_servidor/
Damos al script permisos de ejecución:
chmod +x ~/backup_rsync
Ahora automatizamos el proceso para que se ejecute a las 23:00 hora local en nuestro ordenador:
crontab -e
Y añadimos:
* 23 * * * ~/backup_rsync
La primera vez que se ejecute consumirá muchísimo ancho de banda al necesitar descargar todos los archivos no excluidos del servidor.
6.- TAREAS PARA VOSOTROS:
Esto ya no lo explico así aprendéis cada uno: La pega de este método es que si borramos accidentalmente un archivo del servidor importante, recuperarlo será algo difícil si han pasado las 23:00 de la noche al haberse borrado el archivo también en nuestro disco duro. Lo perfecto sería que creáramos en nuestro disco duro un script que comprima cada semana (usando crontab para que se ejecute cada mes) y que cree un backup de la carpeta backup_servidor entera. Es muyyyy sencillo.
Después podríamos hacer en el mismo script que se borren los comprimidos más antiguos de un par de meses.
Todos los comandos están explicados y requerirían una leve modificación.
7.- Si necesitáis alguna vez restaurar los archivos del servidor sería del siguiente modo:
rsync -e ssh -avzu backup_servidor usuario@dominio.com:~/
(Ahora no borréis archivos del servidor que os veo).
Tutorial terminado, espero que os sirva como a mí. Ya nunca me preocupo, para nada, de si le pasa algo a mi servidor
el 25 Septiembre 2007 a las 12:55
25 Septiembre 2007 a las 13:36
Magnífico post. Muchas gracias!
25 Septiembre 2007 a las 16:42
He dejado antes un comentario identificándome como openid y al terminar me ha redirigido a http://magarto.com/blog/wp-comments-post.php
25 Septiembre 2007 a las 21:35
Pfff, mañana echo un vistazo a la base de datos Dondado.
Un abrazo
Gracias Draxus
31 Octubre 2007 a las 03:25
Este paso:
“cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys” en el ordenador desde el que vamos a conectarnos al servidor no es necesario. Por lo menos a mi me funciona sin meter la clave ahí, y dejandola en un fichero identifdad.pub dentro de ~/.ssh/ .
Imagino que eso sería necesario se quiere hacer un ssh a sí mismo.
El resto, genial. Me ha sido bastante útil
Un saludo.
31 Octubre 2007 a las 07:23
Eso depende del servidor, del sistema operativo y versiçon de ssh que use así como de si está especificado algo así, no obstante es un paso que en la mayoría de los casos es necesario
Gracias Starman, un saludo