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 [email protected]:/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 [email protected]
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 [email protected]:/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 [email protected]:/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!