Script de backup para Drupal

Cuando hablamos de Drupal, el espectro de productos desarrollados con el es amplísimo. Me refiero a que podemos encontrar desde pequeños portales montados con lo justo y desplegados en un pequeño servidor, hasta completos sites empresariales con varios nodos frontales, balaceadores de carga, cluster de bases de datos, etc.

Normalmente en proyectos grandes se dispone de copias de seguridad de ficheros y bases de datos, por cuenta de los chicos de sistemas, pero este tipo de backups suelen ser complicados de restaurar, por afectar a mas componentes del sistema opertivo ademas de nuestro querido Drupal que se nos acaba de romper. Además, muchas veces ni siquiera pueden ser restaurados por el equipo de desarrollo, con lo que en la práctica no suele ser recomendable fiarnos solo de este tipo de respaldos.

Si queremos estar tranquilos, lo mejor es verlo de esta manera: hoy en día, el espacio en disco es barato.

En la mayoría de los casos, lo normal será que tengamos espacio disponible en disco que podemos usar para realizar nuestros propios backups, programados con una sencilla tarea en el crontab de la máquina, digamos suficiente para guardar una copia diaria durante al menos una semana.

Para ello, suelo utilizar alguna variación de este script, que saca copia de la base de datos y del directorio fisico que le indiquemos, con lo que tendremos un backup completo del sitio Drupal en dos ficheros.

Para utilizar este script necesitaremos:

  • mysqldump, como herramienta para realizar la copia de la BBDD
  • tar, como herramienta para generar un archivo comprimido de los ficheros.

OJO: Cuidado donde dejamos este script y los permisos del fichero, ya que tendremos en el los datos de acceso al MySQL de Drupal. No podemos tenerlo en un directorio público y su juego de permisos deberia ser algo como 700, dependiendo de como lo vayamos a ejecutar.

 


#!/bin/bash

# DATOS
DRUPAL_FILES=/var/www/nuestro-drupal
BACKUP_DIR=/la/carpeta/raiz/de/backup
FILENAME=drupal_auto_backup_

USER=usuarioBBDD
PASSWORD=passwordBBDD
DATABASE=nombreBBDD
HOST=hostBBDD

# Numero de dias a conservar los ficheros
DIAS=7


# COMIENZO
DATE=`date +%Y"-"%m"-"%d"--"%H"-"%M`

PATH_MYSQL=$BACKUP_DIR/ddbb/
PATH_FILES=$BACKUP_DIR/files/

if [ ! -d "$PATH_MYSQL" ]; then
 echo "Creando directorio $PATH_MYSQL"
 mkdir -p $PATH_MYSQL
fi

if [ ! -d "$PATH_FILES" ]; then
  echo "Creando directorio $PATH_FILES"
  mkdir -p $PATH_FILES
fi


FILE_MYSQL=$PATH_MYSQL$FILENAME$DATE".sql"
FILE_TAR=$PATH_FILES$FILENAME$DATE".tar.gz"


echo "Generando backup de MySQL $FILE_MYSQL"
mysqldump --user=$USER --password=$PASSWORD --host=$HOST $DATABASE  > $FILE_MYSQL

echo "Generando backup de ficheros $FILE_TAR"
cd $DRUPAL_FILES
tar cvvzf $FILE_TAR *


echo "Eliminando backups antiguos"
find $PATH_MYSQL -type f -name "$FILENAME*" -mtime +$DIAS -exec rm -v {} \;
find $PATH_FILES -type f -name "$FILENAME*" -mtime +$DIAS -exec rm -v {} \;