Algo de lo que muchas veces nos olvidamos al montar nuestras webs y de lo que solemos acordarnos cuando ocurre una desgracia es de las copias de seguridad. Tener un buen protocolo de copias de seguridad y de restauración es fundamental cuando de verdad nos importa nuestro proyecto.
Hoy en día la mayoría de las webs guardan dos tipos de información: el contenido en una base de datos y la configuración de la web, plugins, plantillas, etc en el sistema de ficheros del servidor. Teniendo en cuenta esto, os voy a explicar de forma sencilla como hago yo las copias de estos dos elementos de forma automática.
Para empezar, hace falta cumplir algunos requisitos para poder adaptar el método que aquí explico.
- El servidor debe trabajar en Linux
- Se debe tener acceso mediante SSH (Secure SHell)
- Debemos tener disponible el demonio CRON
- El servidor de base de datos debe ser MySQL
En primer lugar debemos definir un directorio de trabajo dentro del servidor, que será donde alberguemos los scripts y donde guardaremos las copias de seguridad. La mejor opción es ponerlo fuera del directorio propio de la web, aunque hay servidores que no contemplan esta opción y que todo el directorio del usuario está publicado en la red. En éste caso conviene proteger el directorio para que nadie pueda tener acceso.
Ahora que tenemos el directorio listo, debemos crear los scripts. Como ya he comentado antes, vamos a separar la copia de base de datos de la de los archivos. Comenzaremos por la base de datos. En el siguiente script debéis cambiar los datos en negrita por los de vuestro servidor, si poner comillas ni nada similar.
#!/bin/bash
# Obtiene la fecha para el archivo
FECHA=`date +%m%d`
mysqldump --opt --host=servidor --user=usuario --password=password base_de_datos > bd.sql
zip -q bd/bd$FECHA.zip bd.sql
rm bd.sql
Una vez reemplazada la información necesaria, lo guardaremos con extensión .sh y luego desde la línea de comandos le cambiamos los permisos (chmod 744 script.sh). Lo que hará el script es descargar la base de datos a un fichero sql y luego lo comprimirá en una subcarpeta llamada bd añadiendo la fecha de la copia y luego borrará el fichero sql anterior. Una vez hecho esto, ya podemos editar la configuración del Cron con el comando crontab -e. Incluiremos una entrada en el fichero indicando cuando queremos que se ejecute. En mi caso le indico que debe ejecutarse siguiendo el esquema 0 0 * * *, es decir, a las 0:00 todos los días de todos los meses. Tras indicar cuando lo queremos, se debe añadir donde encontrar el fichero con el script. Estos pasos son los que pueden resultar más complicados si no se tienen unos mínimos conocimientos sobre linux, así que si alguno necesita alguna aclaración, no tiene más que pedirla en los comentarios.
Para copiar los ficheros de la web, tendremos que usar otro script:
#!/bin/bash
# Obtiene la fecha para el archivo
FECHA=`date +%m%d`
zip -qr archivo_destino.zip carpeta_origen
Ahora solo deberemos configurar que carpeta queremos guardar comprimida y en donde y luego añadir otra entrada en el Cron. Yo normalmente realizo una copia semanal, ya que raro es que se cambien los ficheros importantes de la web.
A grandes rasgos éste es el método que yo empleo para realizar mis copias y por ahora siempre me ha dado buen resultado. Un buen consejo es que una vez configurado el método hay que comprobar que se puede recuperar la web desde los ficheros, ya que más de una vez ha pasado que estos no se creaban como era debido y uno se entera demasiado tarde.
Cualquier duda, os podéis poner en contacto conmigo o bien a través de los comentarios o a través del formulario de contacto.