Blog personal de Diego de Haller
Blog personal de Diego de Haller

Hosting Redcoruna: Copias de seguridad automatizadas

Esta fue la cara que se me puso el domingo por la noche, cuando accidentalmente borré la carpeta que contiene todos los archivos que se utilizan tanto en este blog como en otros que gestiono. En un segundo, borré más de un gigabyte de datos. Sin vuelta atrás. Sin entrar a explicar cómo llegué a cometer ese error tan estúpido, ni cómo conseguí recuperarlo todo a pesar de no disponer de un backup muy reciente, he usado esta experiencia para, por fin, poner un script automático que haga copias de seguridad diarias y mantenga dos días de copias, borrando el resto.

Estos scripts que pongo aquí, junto con el cron que usaremos para ejecutarlos, aplican sobre todo a un hosting compartido, y he usado el mío (Redcoruna, muy buenos, por cierto) para probarlo. Y ahora toca le momento disclaimer: pongo los scripts tal cual, sin ninguna garantía de que funcionen en vuestro hosting (cada uno es un mundo en cuanto a configuración de permisos). También tened en cuenta que si bien las instrucciones que se usan aquí no son muy complejas, requieren cierto conocimiento mínimo del shell de Linux. Recordad que Google es vuestro amigo para buscar información sobre qué hace cada comando. Y por último, no me responsabilizo de lo que podáis borrar modificando estos scripts. Tal cual están, funcionan (a falta de cambiar las rutas, usuarios y passwords), pero como nunca se sabe lo que puede pasar… Ahí queda dicho.

Bien, veamos al tema. Hay dos scripts. Uno que hace copia de seguridad de los archivos y otro que hace copia de la base de datos.

#!/bin/bash
data1=`date -u +%Y-%m-%d`;
mkdir "backup/$data1"
cd public_html/
tar -cvf ~/backup/$data1/$data1.tar * ; gzip ~/backup/$data1/$data1.tar
data0=`date -d "2 days ago" +%Y-%m-%d`;
if [ -e ~/backup/$data0 ]
    then
    rm -r ~/backup/$data0
fi

Este script lo que hace es crear una carpeta con la fecha, dentro de la carpeta backup. Esa carpeta backup estará en el raíz de vuestro usuario en Redcoruna, es decir, será la primera carpeta que veáis cuando entráis por FTP al servidor. Lo siguiente que hace el script es cambiar a la carpeta public_html (que en mi caso es de la que quiero hacer una copia, ya que contiene TODOS los ficheros que se utilizan para mostrar las páginas. Una vez dentro, ejecutamos tar y gzip, que básicamente viene a copiar todo el contenido de esa carpeta y subcarpetas en un único fichero. Y por último, miramos si hay alguna carpeta que sea de hace dos días, y de haberla, la borramos. De esta manera sólo guardamos las dos últimas copias diarias. El formato es año-mes-día para que salga bien ordenado, pero si queréis cambiarlo, adelante.

#!/bin/bash
data1=`date -u +%Y-%m-%d`;
mkdir "backupBD/$data1"
cd ~/backupBD/$data1/
mysqldump -u usuarioBBDD -pLaContraseña LaBBDD  > ~/backupBD/$data1/LaBBDD.sql
tar -cvf LaBBDD.sql.$data1.tar *.sql ; gzip ~/backupBD/$data1/LaBBDD.sql.$data1.tar
rm ~/backupBD/$data1/*.sql
data0=`date -d "2 days ago" +%Y-%m-%d`;
if [ -e ~/backupBD/$data0 ]
    then
    rm -r ~/backupBD/$data0
fi

En este hacemos algo parecido al anterior, pero copiando el contenido de la BBDD que le decimos, con el USUARIO y la CONTRASEÑA (ojo, dejad la «p» sin espacio al lado de la contraseña) de vuestro servidor. Luego lo comprimimos y buscamos si hay algo que borrar de hace dos días.

Con que modifiquéis las rutas y usuario y password para la base de datos. Y esto sería la primera parte. La segunda parte, es configurar la ejecución de los script mediante el uso de cron. Siguiendo con la base de Redcoruna, tendréis acceso a la configuración de los cron en la sección avanzada:


Y dentro, en la sección de Añadir nuevo, lo rellenáis con esto:


Lo que le he puesto es que el script (llamado script.sh, pero vosotros habréis puesto cualquier otro) se ejecutará a las 2:30 de la madrugada cada día. Fijaos en que en la parte del comando a ejecutar le he puesto la ruta del intérprete que lo ejecutará (/bin/sh) y la ruta en la que se encuentra. El símbolo ~(la tilde de la ñ) referencia vuestra carpeta «home», que será vuestra raíz.

Y ya está, eso es todo. El proceso lo tendréis que repetir para el segundo script, usando una hora distinta para no sobrecargar demasiado el servidor, y asunto resuelto.

Si tenéis alguna sugerencia para mejorarlo o lo que sea, no dudéis en usar los comentarios.

¡Saludos!

Una idea sobre “Hosting Redcoruna: Copias de seguridad automatizadas”

Los comentarios están cerrados.