You are here

Programando los backups en Drupal

He estado haciendo unas pequeñas modificaciones al script de backup para drupal para que podamos ejecutarlo en modo batch y así programarlo como una tarea más de cron para hacer backups diarios, semanales, ... en definitiva ir guardando copias de la información de manera regular (eso que tanto se nos olvida).

Se ha adaptado para que en lugar de mostrar la información por pantalla nos lo guarde en un fichero de log que nos será posteriormente remitido vía e-mail, se han incluido las configuraciones de passwords para acceder a la base de datos y así no es necesario introducirlos cada vez que se ejecuta el script. Como añadido podemos poner una quota, para que cuando tengamos más de X ficheros de backup nos elimine el más antiguo para no tener un número excesivo de backups en disco.

En definitiva ha quedado tal que así:

#!/bin/bash
#
# fullsitebackup.sh V1.0
#
# Full backup of website files and database content.
#
# A number of variables defining file location and database connection
# information must be set before this script will run.
# Files are tar(ed) from the root directory of the website. All files are
# saved. The MySQL database tables are dumped without a database name and
# and with the option to drop and recreate the tables.
#
# Parameters:
#    tar_file_name (optional)

#
# Configuration
#

# Database connection information
  dbname=nombre_db     # (e.g.: dbname=drupaldb)
  dbhost=host_para_la_bd
  dbuser=usuario_para_la_bd # (e.g.: dbuser=drupaluser)
  dbpassword=password_para_la_bd

# Website Files
  webrootdir=/path/al/drupal  # (e.g.: webrootdir=/home/user/public_html)

#
# Variables
#

# Default TAR Output File Base Name
  tarnamebase=sitebackup-
  datestamp=`date +'%Y-%m-%d'`

# Execution directory (script start point)
  startdir=/directorio/de/los/ficheros/backup

# Temporary Directory
  tempdir=tmpbckdir$datestamp

# Maximum number of backup files
max_files=20

# Admin email and subject, to send email log
subject="fullsitebackup.sh_V1.0"
email_adress="usuario@dominio.com"

#
# Input Parameter Check
#

if test "$1" = ""
  then
    tarname=$tarnamebase$datestamp.tgz
  else
    tarname=$1
fi

#
# Banner
#
echo "" > $startdir/backup.log
echo "fullsitebackup.sh V1.0" >> $startdir/backup.log
prevdir=`pwd`
cd $startdir

#
# Check if we have rached the file quota
#
echo "" >> $startdir/backup.log
echo "Checking if we have reached quota:" >> $startdir/backup.log
total_files=`ls $startdir/sit* | wc -l`
if [ $total_files = $max_files ]; then
        oldest_file=`ls $startdir/sit* | sort | head -1`
        echo "Quota reached: limit $max_files files" >> $startdir/backup.log
        echo "Deleting oldest file: $oldest_file" >> $startdir/backup.log
        rm $oldest_file
else
        echo "Not yet: $total_files backup files in disk" >> $startdir/backup.log
fi

#
# Create temporary working directory
#
echo " .. Setup" >> $startdir/backup.log
mkdir $tempdir
echo "    done" >> $startdir/backup.log

#
# TAR website files
#
echo " .. TARing website files in $webrootdir" >> $startdir/backup.log
cd $webrootdir
tar cf $startdir/$tempdir/filecontent.tar .
echo "    done" /data/drupal_backup/sitebackup-2007-11-10.tgz

#
# sqldump database information
#
echo " .. sqldump'ing database:" >> $startdir/backup.log
echo "    user: $dbuser; database: $dbname; host: $dbhost"
cd $startdir/$tempdir
mysqldump -p --user=$dbuser --password=$dbpassword --host=$dbhost --add-drop-table $dbname > dbcontent.sql
echo "    done" >> $startdir/backup.log

#
# Create final backup file
#
echo " .. Creating final compressed (tgz) TAR file: $tarname" >> $startdir/backup.log
tar czf $startdir/$tarname filecontent.tar dbcontent.sql
echo "    done" >> $startdir/backup.log

#
# Cleanup
#
echo " .. Clean-up" >> $startdir/backup.log
cd $startdir
rm -r $tempdir
echo "    done" >> $startdir/backup.log

#
# Exit banner
#
echo " .. Full site backup complete" >> $startdir/backup.log
echo "" >> $startdir/backup.log
cd $prevdir

#
# Send Report
#
mail -s $subject $email_adress < $startdir/backup.log
echo " .. Full site backup complete"

Podéis usar el script original para restaurar el backup, aunque esperemos que los backups sean tan solo un refuerzo de la seguridad de nuestro sitio y no tengamos que echarle mano. Wink

Espero que os sea de utilidad, es posible que próximamente haga algunas modificaciones para añadir avisos por SMS usando la API de Google y la clase java EnviaSMS proporcionada por Ivan López, que he estado probando últimamente y sobre la cuál quisiera decir que funciona perfectamente.

Drupal: 
Qué te parece: