multidebian

Últimamente si hay algo que escasea en mi vida es el tiempo, el tema sobre el que habla este articulo no es otro que el de gastar un poco de tiempo para ahorrarlo en un futuro no muy lejano. El hacer copias de seguridad de los datos importantes periódicamente es algo que hace tiempo necesitaba automatizar ya que siempre suelo hacerlo a mano. Si hay algo que tenemos que tener en cuenta cuando tenemos un Servidor Web es que todo lo que hemos instalado desde el sistema operativo como las Webs, Bases de datos y demás cosas importantes están grabadas dentro de un disco duro que puede tarde o temprano fallar. Las copias de seguridad es algo que es necesario hacerlas ya que si un día el disco duro de nuestro servidor quiebra puede darnos mas de un dolor de cabeza si no las tenemos.

En este tutorial os voy a contar la forma de hacerlo olvidándonos de todo para que tan solo tengamos que preocuparnos de restablecer nuestras copias de seguridad automáticas una vez tengamos problemas, mientras tanto podremos olvidarnos y sentirnos seguros ….

En mi caso y para ponernos en situación os cuento que dispongo de dos servidores web conectados a Internet las 24 h. Uno es remoto y el otro esta en mi casa. Los dos disponen del puerto 22 abierto y aceptan conexiones seguras por SSH

copy1

Contando con esto y para practicar con este tutorial necesitamos tener dos maquinas conectadas las 24 h a Internet ya que vamos a automatizar todo el proceso de backup incluyendo los directorios donde se alojan nuestras webs, sus bases de datos MySQL y las enviaremos desde el servidor remoto hacia nuestro servidor en casa. Esto lo aremos de forma programada por lo que podremos decirle a nuestro servidor remoto que cumpla con sus tareas y después nos las envié a nuestro servidor en casa de una forma totalmente automática .

El comprimir lo que necesitemos del servidor remoto y enviarlo remotamente no es un problema gracias a la transferencia segura por SCP. Esto podemos hacerlo pero por defecto solo podemos hacerlo a mano ya que cuando vas a transferir el fichero comprimido con todo tu contenido de un servidor a otro te pregunta tu nombre de usuario y password.

Para comenzar vamos a quitar esta pega creando una llave en el servidor remoto y copiandola en el servidor en casa. De esta forma las dos maquinas podrán entenderse entre ellas sin necesidad de que el ser humano intervenga introduciendo el nombre de usuario y password.

Esta técnica puede ser muy cómoda para automatizar tareas entre varios ordenadores pero hay que contar con el factor ( Seguridad ). Si nuestros ordenadores pueden comunicarse sin mas es gracias a que los dos usan la misma llave. Esta llave puede ser peligrosa si cae en manos de terceros ya que tan solo con instalárnosla podemos tener acceso incondicional al servidor. Remotamente no es que sea del todo fácil capturarla pero si alguien tiene acceso a nuestra maquina de manera local podrá copiarla sin mas. Esto es mejor saberlo antes de poner en practica esta técnica de conexión segura sin clave para SSH.

Requisitos para un correcto funcionamiento …

OpenSSH instalado en los dos servidores
– El puerto 22 abierto en nuestro router apuntando hacia la IP nuestro servidor ( casi siempre solo es necesario en nuestro servidor casero )
GNU/Linux Debian en los dos servidores, aunque esto es perfectamente aplicable para Ubuntu ya que tan solo cambia el comando sudo antepuesto.

Conexión segura por SSH sin clave

Esta técnica puede ser muy cómoda para automatizar tareas entre varios ordenadores pero hay que contar con el factor ( Seguridad ). Si nuestros ordenadores pueden comunicarse sin mas es gracias a que los dos usan la misma llave. Esta llave puede ser peligrosa si cae en manos de terceros ya que tan solo con instalárnosla podemos tener acceso incondicional al servidor. Remotamente no es que sea del todo fácil capturarla pero si alguien tiene acceso a nuestra maquina de manera local podrá copiarla sin mas. Esto es mejor saberlo antes de poner en practica esta técnica de conexión segura sin clave para SSH.

Una vez sabido todo esto vamos a comenzar por acceder a la Terminal de nuestro servidor remoto vía SSH que será el servidor del cual necesitamos hacer las copias de seguridad

ssh usuario@servidorremoto

Una vez dentro vamos a crear la llave que luego enviaremos a nuestro servidor casero así …

ssh-keygen -t rsa

Una vez tengamos la llave veremos un nuevo fichero llamado id_rsa.pub. Ahora necesitamos copiar esta llave en el servidor casero donde alojaremos las copias de seguridad.

Ahora accederemos a el vía sftp y subiremos la llave tecleando lo siguiente …

sftp usuario@servidorencasa

Introducimos el password y copiamos la llave …

put id_rsa.pub

Ahora necesitamos saber si este ordenador tiene el directorio .ssh en la cuenta del usuario que acabamos de entrar. Miraremos a ver si esta con …

ls -la

Así veremos todos los directorios, visibles y ocultos con sus permisos y demás.

Si tenemos el directorio .ssh bien y si no lo tenéis que crear con ….

mkdir .ssh

Ahora movemos la llave renombrándola con …

mv id_rsa.pub .ssh/authorized_keys

Ahora ya tenemos esta nueva llave tanto en el servidor remoto donde aremos las copias de seguridad como en el servidor casero donde las alojaremos.

Ya podemos salir del sftp con el comando exit y si hacemos la prueba ya podremos conectarnos entre si sin password.

Esto es valido para dos ordenadores que se conocen y conseguimos con ello poder automatizar tareas con ssh, sftp, scp y demás sin que nos pida un password de conexión de una manera segura.

Hacemos la prueba y nos quedamos conectados al servidor remoto así …

ssh usuario@servidorremoto

Ahora que ya hemos eliminado esta barrera de nuestro paso vamos aremos las copias de seguridad de lo que necesitemos. En mi caso y como en el caso de casi todos los que habéis montando cualquiera de mis proyectos de Servidores Web tengo varios Blogs con WordPress. Dicho CMS se basa en varias partes. El mismo software de wordpress, plugins, themes y lo que incluyamos nosotros mismos como por ejemplo imágenes en el directorio /upload. Por otro lado nos encontramos con sus respectivas bases de datos MySQL las cuales contienen prácticamente todos los textos que podemos ver en cada Blog.

Con lo cual necesitamos copiar un directorio en cuestión y hacer una copia de seguridad de la base de datos de cada Blog que tengamos.

Dudo bastante que este servidor remoto solo lo uséis para alojar un Blog al menos ese no es mi caso. En el servidor remoto tengo alojados 10 Blogs, así que aré una copia masiva tanto del directorio donde tengo todos los Blogs como de todas las bases de datos a la vez.

Hacerlo todo a la vez puede facilitar la tarea a la hora de restaurarlo todo y volver a ponerlo todo en su sitio, en vuestras manos os dejo este detalle.

Copia de seguridad completa, archivos y bases de datos MySQL

Para comenzar voy a comprimir el directorio donde se encuentran todos mis Blogs, así que nos situamos en nuestro servidor remoto y localizamos el directorio que queramos hacer la copia de seguridad, en mi caso es /home/usuario/www/ del cuelgan todos los directorios donde tengo los Blogs …

cd /home/usuario

Ahora comprimiremos el directorio ( www ) con …

tar -czf /home/usuario/backupwww.tar.gz /home/usuario/www

Una vez comprimido aremos una copia de seguridad masiva de todas las bases de datos que tenemos con …

mysqldump -uroot -pPASSWORD --all-databases >
 /home/usuario/backupmysql.`date +%Y%m%d`.sql

(Esta ultima linea es toda seguida no partida en dos )

Donde pone password introducid el password que tenga root en la base de datos MySQL no en el sistema.

Una vez hechas las dos copias de seguridad ya tenemos todo lo que necesitamos para restaurarlo todo en caso de catástrofe.

backupwww.tar.gz y backupmysql.sql los tenemos en el directorio /home/usuario y en caso de necesitarlos los tenemos hay pero si recordamos al principio del articulo eliminamos las pegas de la petición del password al acceder a nuestro servidor en casa.

Si nuestro servidor casero no necesita que le introduzcamos el password a mano podremos enviar estos dos ficheros por una conexión segura vía sftp.

El tema está en automatizar el proceso para que no tenga que hacerlo yo a mano y ya que tengo estas dos maquinas conectadas las 24 h porque no vamos a dejarlas que cumplan ellas dos solas esta tarea por nosotros.

Una vez hechas las copias de seguridad de todo lo que necesitamos tanto de los directorios como de las bases de datos MySQL necesitamos enviarlos a nuestro servidor casero con sftp. Para hacer esto vamos a usar el programador de tareas por defecto en todos los sistemas operativos GNU/Linux.

Con Cron podremos decirle a que hora hacer las copias de seguridad y a que hora enviarlas a nuestro servidor casero que le esta esperando con su propia llave de acceso.

En mi caso se a ciencia cierta que el trafico menos intenso suele estar sobre las 8 de la mañana los viernes y los sabados con lo que voy a programar todas las tareas de Backup y envío remoto a partir de esa hora y en esos días.

Si repasamos el articulo donde os contaba como funciona el programador de tareas Crontab veremos su funcionamiento y podréis adaptarlo a vuestras necesidades.

Un pequeño script llamado backup.sh

Antes de programar nada vamos a crear un pequeño script que hará todo lo que necesitemos correlativamente del siguiente modo …

vi /home/usuario/backup.sh

Una vez dentro del editor añadimos las lineas que usamos anteriormente para comprimir nuestros datos web y las bases de datos MySQL así …

#!/bin/sh

tar -czf /home/usuario/backupwww.tar.gz /home/usuario/www
 
mysqldump -uroot -pPASSWORD --all-databases >
 /home/usuario/backupmysql.`date +%Y%m%d`.sql

No está de mas recordar que la linea donde hacemos la copia de seguridad de todas nuestras bases de datos es una sola y no dos separadas por un espacio, evitemos confusiones :)

Salimos y guardamos el archivo backup.sh pulsando la tecla ( ESC ) seguidamente ( :wq! ) y por ultimo ( Enter ).

Le damos permisos …

chmod 777 backup.sh

Automatizando tareas con Crontab

Vamos a continuar agregando una linea que le dirá al programador de tareas que haga una copia de seguridad de nuestros contenidos pero antes vamos a asignarle a Cron el editor de texto ( Vi ) del siguiente modo …

export EDITOR=/usr/bin/vi

Ahora abrimos el programador de tareas con …

crontab -e

Ahora agregamos las siguientes lineas …

05 8 * * 5 /home/usuario/backup.sh

Con esto le decimos que cada viernes a las 8:05 de la mañana comprima todo el directorio www al fichero backupwww.tar.gz y que seguidamente se forme una copia de seguridad de todas las bases de datos MySQL que tengamos.

Ahora el solo hará las copias de seguridad de todos nuestros datos una vez a la semana.

Seguidamente vamos a agregarle la siguiente linea donde enviaremos dichos archivos a nuestro servidor casero el cual equipamos anteriormente con la llave de la siguiente forma …

00 9 * * 5 scp /home/usuario/backup* usuarioremoto@maquinaremota:
                                             /home/usuario/backup

Ahora los dos archivos anteriores de copia de seguridad que comienzan por el nombre ( backup ) se copiarán a las 9:00 de la mañana de cada viernes.

Salimos del crontab pulsando la tecla ( ESC ) seguidamente ( :wq! ) y por ultimo ( Enter ).

Reiniciamos el demonio de Crontab con …

/etc/init.d/cron restart

Recordemos que en el servidor de casa donde vamos a alojar las copias de seguridad tiene que tener una carpeta con permisos para que se pueda escribir, por lo tanto nos situamos en nuestro servidor casero y tecleamos …

chmod 777 /home/usuario/backup

Ahora todos los viernes entre las 8 y las 9 de la mañana tendremos una copia de seguridad fresca de todos nuestros contenidos generados en la ultima semana.

Todo esto está muy bien pero si algún día nuestro servidor fallece tendremos que saber como volver a tener todos nuestros Blogs de nuevo funcionando.

Restaurando las copias de seguridad …

Para restaurar una copia de seguridad tanto de los directorios como de las bases de datos que antes copiamos vamos a situarnos en el servidor casero que es quien tiene las copias.

Desde el enviaremos las copias hacia nuestro servidor remoto ya configurado con su Apache, Mysql y demás, tan solo necesita las bases de datos y los directorios con los Blogs así que vamos a subir los archivos con …..

scp /home/usuario/backup/backup* usuario@servidorremoto:/home/usuario

Ahora tenemos las copias de seguridad de nuevo en nuestro servidor remoto. Accedemos a el via SSH con …

ssh usuario@servidorremoto

Ahora vamos a restaurar el fichero backupwww.tar.gz y podremos ver de nuevo el directorio www con …

tar -xvzf backupwww.tar.gz

Ahora vamos a restaurar el fichero backupmysql.sql que contiene todas las bases de datos de todos los blogs con …

mysql -u root -p < /home/usuario/backup/mysql.sql

Y listo !! Ahora tenemos todos nuestros Blogs tal y como los teníamos en la ultima copia de seguridad que hicimos.

Ahora podemos despreocuparnos del tema de las copias de seguridad ya que nuestros dos servidores se ocuparán de hacer el trabajo por nosotros y si necesitamos restaurar las copias y no nos acordamos siempre tendremos este manual OnLine 24 h Non Stop :D

Via http://www.forat.info/2010/05/10/backup-automatico-seguro-entre-servidores-debian/

Related Posts with Thumbnails
Tagged with:  

Comments are closed.

Free WordPress Theme