Hola...
Os mando un Shell para hacer Backups completos de un sitio Drupal...
(desarrollado a partir de un original en inglés)
- Es auto explicativo, con muchos comentarios y mensajes en castellano...
Saludos
#!/bin/bash
#
# fullsitebackup.sh V1.2
#
# 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.
#
# ---------------------------------------------------------------------------------------
# March 2007 Updates
# - Updated script to resolve minor path bug
# - Added mysql password variable (caution - this script file is now a security risk - protect it)
# - Generates temp log file
# - Updated backup and restore scripts have been tested on Ubunutu Edgy server w/Drupal 5.1
#
# - Enjoy! BristolGuy
#---------------------------------------------------------------------------------------
# Agosto 2007 Updates
# - Mejora de las variables dels shell-script añadiendo "{}".
# - Solicita en el terminal el usuario y/o el password de la base de datos si la variable correspondiente
# esta vacia. Ello evita tener que escribirlos en este fichero - mayor seguridad.
# ATENCIÓN: Si este shell se desea ejecutar mediante "cron" recomiendo crear un fichero con las entradas
# solicidas (1 por línea) y redireccionar ese fichero como entrada... (... de nada).
# - Limpia pantalla antes de empezar a dar mensajes... (una mania como otra...)
# - Traducción y mejora del formato de los mensajes en el fichero de log.
# - Fecha del backup en formato europeo: dd-mm-aaaa
# - Mensajes por pantalla y sobre el fichero de log.
# - Mismo nombre para los ficheros del backup y del log (difieren en la extensión)
# - Cahequeo del resultado de la operación sobre la BBDD y control de error...
#
# - Este shell ha sido probado con éxito sobre UBUNTU 7.04 (Feisty Fawn) / DRUPAL 5.2 / MySQL 5.0.38
#
# Saludos: JRF (Usuario DRUPAL: tenomar - E-mail: isaac_el_cec [at] gmail.com )
#----------------------------------------------------------------------------------------
#
## Parameters:
# tar_file_name (optional)
#
#
# Configuration - Datos a introducir...
#########################################################################################################
# Directorio del sitio Web
webrootdir="/var/www/drupal-5.2" # (e.g.: webrootdir=/home/user/public_html/drupal)
# Información sobre la Base de Datos
dbname="drupal" # (e.g.: dbname=drupaldb)
dbhost="localhost"
dbuser="drupal_adm" # (e.g.: dbuser=drupaluser - puede dejarse en blanco... lo pedirá por consola)
dbpw="" # (e.g.: dbuser password - puede dejarse en blanco... lo pedirá por consola)
#########################################################################################################
# Fin de los datos a introducir
ESTE_SHELL=`basename "${0}"`
tput clear
echo ""
echo "${ESTE_SHELL} - Shell de BACKUP de sitio DRUPAL."
echo ""
#
# Petición del Nombre de Usuario y del password si han dejado vacios en este fichero
#
while [ ! "${dbuser}" ]
do
echo ""
echo "${ESTE_SHELL} - Nombre de Usuario de la Base de Datos: "
read dbuser
done
while [ ! "${dbpw}" ]
do
echo ""
echo "${ESTE_SHELL} - Password de la Base de Datos (entrada en modo invisible): "
read -s dbpw
done
#
# Variables
#
# Default TAR Output File Base Name
tarnamebase=sitebackup-
datestamp=`date +'%d-%m-%Y'` # Fecha en formato europeo para el nombre de los ficheros...
# Execution directory (script start point)
startdir=`pwd`
logfile="${startdir}/sitebackup-${datestamp}.log" # file path and name of log file to use
# Temporary Directory
tempdir="tmp_${datestamp}"
#
# Input Parameter Check
#
if [ "${1}" = "" ]
then
tarname=${tarnamebase}${datestamp}.tgz
else
tarname=${1}
fi
#
# Begin logging
#
# Creación del fichero log y primera línea...
echo "" > ${logfile}
echo "${ESTE_SHELL} - Backup completo del sitio DRUPAL: ${webrootdir}" | tee -a ${logfile}
starttime=`date +'%d-%m-%Y %T'` # Fecha en formato europeo
echo "${ESTE_SHELL} - Inicio: ${starttime} ..." | tee -a ${logfile}
echo "" | tee -a ${logfile}
# Check that the webroot directory exists
if [ ! -d "${webrootdir}" ]
then
echo ""
echo "${ESTE_SHELL} - Parámetro interno no válido: webrootdir" | tee -a ${logfile}
echo "${ESTE_SHELL} El directorio: ${webrootdir} no existe" | tee -a ${logfile}
echo "${ESTE_SHELL} - Finalizado." | tee -a ${logfile}
# Espera para leer los mensajes por pantalla...
echo "${ESTE_SHELL} - Pulsar INTRO para finalizar ..."
read a
exit 1
fi
#
# Create temporary working directory
#
echo "${ESTE_SHELL} - Creando el directorio temporal de trabajo ${tempdir} ..." | tee -a ${logfile}
mkdir ${tempdir}
#
# TAR website files
#
echo "" | tee -a ${logfile}
echo "${ESTE_SHELL} - Creando el TAR de los ficheros del sitio web ${webrootdir} ..." | tee -a ${logfile}
cd ${webrootdir}
tar cf ${startdir}/${tempdir}/filecontent.tar .
#
# sqldump database information
#
echo "" | tee -a ${logfile}
echo "${ESTE_SHELL} - Volcado (Dump) de la Base de Datos DRUPAL utilizando los datos:" | tee -a ${logfile}
echo "${ESTE_SHELL} Usuario......: ${dbuser}" | tee -a ${logfile}
echo "${ESTE_SHELL} Base de Datos: ${dbname}" | tee -a ${logfile}
echo "${ESTE_SHELL} Host.........: ${dbhost}" | tee -a ${logfile}
cd ${startdir}/${tempdir}
echo "" # Solo por pantalla... por si hay mensaje de error de MySQL...
mysqldump --user=${dbuser} --password=${dbpw} --add-drop-table ${dbname} > dbcontent.sql
# Todo ha ido bien???
if [ "${?}" -ne "0" ]
then
echo "" | tee -a ${logfile}
echo "${ESTE_SHELL} - ERROR FATAL: No se ha podido volcar la Base de Datos..." | tee -a ${logfile}
echo "${ESTE_SHELL} Posiblemente alguno de los parámetros anteriores o la palabra de paso son incorrectos." | tee -a ${logfile}
# limpiar lo que hemos hecho hasta ahora...
echo "${ESTE_SHELL} - Limpiando el directorio temporal de trabajo ${tempdir} ..." | tee -a ${logfile}
cd ${startdir}
rm -r ${tempdir}
echo "${ESTE_SHELL} - Finalizado." | tee -a ${logfile}
# Espera para leer los mensajes por pantalla...
echo "${ESTE_SHELL} - Pulsar INTRO para finalizar ..."
read a
exit 9
fi
#
# Create final backup file
#
echo "" | tee -a ${logfile}
echo "${ESTE_SHELL} - Creando el fichero final: ${tarname} ..." | tee -a ${logfile}
tar czf ${startdir}/${tarname} filecontent.tar dbcontent.sql
#
# Cleanup
#
echo "${ESTE_SHELL} - Limpiando el directorio temporal de trabajo ${tempdir} ..." | tee -a ${logfile}
cd ${startdir}
rm -r ${tempdir}
#
# Mensajes finales...
#
endtime=`date +'%d-%m-%Y %T'` # Fecha en formato europeo
echo "" | tee -a ${logfile}
echo "${ESTE_SHELL} - Fin del Backup: ${endtime} " | tee -a ${logfile}
echo "" | tee -a ${logfile}
echo "${ESTE_SHELL} - Ha sido creado el fichero TAR comprimido (tgz): ${tarname} " | tee -a ${logfile}
echo "${ESTE_SHELL} - Backup finalizado." | tee -a ${logfile}
# Espera para leer los mensajes por pantalla...
echo "${ESTE_SHELL} - Pulsar INTRO para finalizar ..."
read a
exit 0
# Fin del shell.