Backups remotos con BackupNinja y SSHFS

Social

Una vez tenemos nuestro servidor instalado y seguro, no nos podemos olvidar de realizar copias de seguridad cada cierto tiempo, y si es posible realizarlas remotamente para evitar desastres, mucho mejor.

Por ejemplo, si tienes un servidor dedicado o un VPS, tiene poco o ningún sentido hacer dumps de las bases de datos y dejarlas en el mismo servidor. Así que una forma sencilla de realizar backups remotamente es a través de SSH (cifrado, seguro y rápido). Puedes montar un servidor de copias de seguridad local en tu casa o trabajo, ya que a través de una linea de fibra se realizarán rápidamente si no tienes mucho volumen de datos. Vamos a ello!

Claves SSH

Lo primero, lo que ahora es nuestro servidor web, sera el cliente SSH que se conectará al servidor de copias de seguridad. Así que generaremos unas claves para poder conectarnos sin contraseña.

ssh-keygen -b 4096 -t rsa -C “$(whoami)@$(hostname)-$(date -I)”

Y copiamos la clave al servidor de copias

scp – ~/.ssh/id_rsa.pub USUARIO@HOST:/home/USUARIO/.ssh/

Ahora, en el servidor de copias, añadiremos la clave al authorized_keys

cat /home/USUARIO/.ssh/id_rsa.pub > /home/USUARIO/.ssh/authorized_keys

Ahora probaremos que la conexión funcione sin pedirnos la clave:

ssh USUARIO@HOST

Si es correcto, ya podemos instalar el software para montar el directorio y realizar las copias.

Instalación y configuración

sudo apt-get install backupninja sshfs

Una vez instalado podemos crear con BackupNinja los tipos de copia que necesitemos, para ello usaremos el comando ninjahelper

ninjahelper

Y abrira la CGI, donde podemos escoger si queremos copias de MySQL, PostgreSQL o de archivos en TAR o RDIFF.

Una vez creemos las tareas, las podemos encontrar en /etc/backup.d/, por ejemplo 10.tar y 20.mysql.

Las mismas tareas de backupninja se pueden programar para que se guarden en un Ahora haremos un pequeño script que montara el directorio SSH y empezará la copia:

nano .sshfsbackup
#!/bin/bash

sshfs USUARIO@HOST:/carpeta_server /mnt/backup

backupninja –run /etc/backup.d/20.mysql

backupninja –run /etc/backup.d/10.tar

fusermount -u -z /mnt/backup/[terminal]

Y le damos permisos de ejecución:

[terminal]sudo chmod +x sshfsbackup.sh

Si no quieres utilizar BackupNinja, también puedes programar los dumps de la base de datos y la copia de los archivos desde la misma consola, este sería un ejemplo del programa:

#!/bin/bash

HOY=$(date +%Y-%m-%d)

sshfs USUARIO@HOST:/carpeta_server /mnt/backup

mysqldump -u root  –all-databases > /mnt/backup/sqldump/alldb_$HOY.sql

tar -cvf /mnt/backup/tar/backup_$HOY.tar /directorio_a_copiar

fusermount -u -z /mnt/backup/

Ahora lo añadimos al Cron para que se ejecute cada dia a las 2 de la madrugada. Asi que editamos el crontab, y añadimos esto:

crontab -e
0 2 * * * sh /root/backups/sshfsbackup.sh

Para que no se acumulen carpetas y archivos de copias en el servidor de backups, también creamos un pequeño script para que vaya eliminando las antiguos. Yo por ejemplo, guardo las copias de los ultimos 10 dias:

nano /home/usuario/purgar.sh

Y añadimos el siguiente codigo, substituyendo las carpetas con las vuestras:

#!/bin/bash

find /carpetabackup/tar/* -mtime +10 -exec rm {} \;
find /carpetabackup/sqldump/* -mtime +10 -exec rm {} \;

Y listo, copias completas programadas remotamente. ¡Espero que os haya servidor!

Xavi Gonzalez Autor

Técnico en explotación de sistemas informáticos y Técnico Superior de Administración de sistemas en red y de Desarrollo de Aplicaciones Web. Actualmente como Responsable técnico y desarrollador web en Egardata Informàtica, en Terrassa.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

ERROR: si-captcha.php plugin: GD image support not detected in PHP!

Contact your web host and ask them to enable GD image support for PHP.

ERROR: si-captcha.php plugin: imagepng function not detected in PHP!

Contact your web host and ask them to enable imagepng for PHP.