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 {} \;