sábado, 9 de octubre de 2010

Script para realizar backups de un servidor web

Este script lo utilizo para hacer backups de servidores web, en este caso ademas es servidor FTP.

Envidentemente se puede ampliar si el directorio que utilizamos como backup es un recurso compartido o es un disco duro USB, puesto que aprovecharíamos para montar y desmontar los medios dentro del mismo script, cosa que recomiendo bastante a la hora de realizar backups.

Otra manera es modificando el comando tar para que realice la copia en una unidad de cintas.

###################################################################
#    Script de copias de seguridad de las web                     #
###################################################################
#
# Este script siempre utiliza rutas completas de
# archivos para que pueda ser ejecutado desde
# cualquier lugar del sistema de archivos
#
###################################################################
##
## Definir VARIABLES
##

SERVIDOR=servidorweb #nombre del servidor

FECHA=`date +%Y%m%d_%H%M%S`
NUM_BACKUPS=10                                             # numero de backups que queremos rotar
                                                        # con cron decidimos cuando se ejecuta cada backup
SALIDA_TAR=1
SALIDA_MYSQL=1
EMAIL_INFORME=micorreo@midominio.com                       #Correo al que enviamos alertas
ASUNTO="BACKUP ERROR# en servidor web $SERVIDOR"        #Asunto del correo de alerta
EMAIL_FROM=webmaster@midominio.web                        #Quien envia el correo de alerta

#Directorio donde guardamos el backup
COMPRIMIR="tar cvfz "
EXT_BACKUP="tar.gz"
DIR_BACKUP="/root/backups"
DIR_BACKUP_RAIZ=$DIR_BACKUP/raiz

DIR_INFORMES=/root/informes
EXT_INFORME="txt"

#CONFIGURACION DEL SERVIDOR
ETC_FILE1="/etc/passwd"
ETC_FILE2="/etc/group"
ETC_FILE3="/etc/shadow"
ETC_FILE4="/etc/vsftpd.conf"

ETC_DIR1="/etc/apache2"
ETC_DIR2="/etc/phpmyadmin"

#directorio donde estan las web
DIR_WEB="/home"

#Base de Datos de la WEB
BBDD=bbdd_web
BBDD_USUARIO=root
BBDD_PASSWD=Clave#de#mySQL
BACKUP_FILE_SQL=$DIR_BACKUP_RAIZ/backup.$SERVIDOR.$FECHA.sql


#############
#   MAIN
#############

##Averiguar cual fue la ultima copia
FILE_ULTIMO="$DIR_BACKUP/ultimo_backup.txt"  #archivo que guarda el numero de la última copia
ULTIMO=`cat $FILE_ULTIMO`
if [ $ULTIMO -lt $NUM_BACKUPS ]
then
NUEVO=`expr $ULTIMO + 1`
else
NUEVO=1
fi

## Nombres de archivo para la copia nueva y su log
FILE_BACKUP=$DIR_BACKUP/$NUEVO.backup_$SERVIDOR.$FECHA.$EXT_BACKUP
FILE_INFORME_BACKUP=$DIR_INFORMES/$NUEVO.backup_$SERVIDOR.$FECHA.$EXT_INFORME

##
## Borrar la copia mas vieja
##
echo Hacer limpieza de backups anteriores >> $FILE_INFORME_BACKUP
rm -vf $DIR_BACKUP/$NUEVO.backup_$SERVIDOR.*.$EXT_BACKUP >> $FILE_INFORME_BACKUP
rm -vf $DIR_INFORMES/$NUEVO.backup_$SERVIDOR.*.$EXT_INFORME >> $FILE_INFORME_BACKUP
rm -vfR $DIR_BACKUP_RAIZ

echo Crear estructura de directorios >> $FILE_INFORME_BACKUP
mkdir $DIR_BACKUP_RAIZ

echo Exportar la BBDD de la web de BICBERRILAN >> $FILE_INFORME_BACKUP
mysqldump --opt --password=$BBDD_PASSWD --user=$BBDD_USUARIO $BBDD > $BACKUP_FILE_SQL
SALIDA_MYSQL=$?

echo Comprimir el directorio raiz del backup >> $FILE_INFORME_BACKUP
$COMPRIMIR $FILE_BACKUP $DIR_WEB $BACKUP_FILE_SQL $ETC_FILE1 $ETC_FILE2 $ETC_FILE3 $ETC_FILE4 $ETC_DIR1 $ETC_DIR2 >> $FILE_INFORME_BACKUP
SALIDA_TAR=$?

echo $NUEVO > $FILE_ULTIMO

#COMANDO PARA ENVIAR CORREO
ENVIAR_MAIL=mailx -s $ASUNTO $EMAIL_INFORME  -- -f $EMAIL_FROM < $FILE_INFORME_BACKUP

if [ $SALIDA_TAR!=0 ]; then
        $ENVIAR_MAIL
else
        if [ $SALIDA_MYSQL!=0 ]; then
                $ENVIAR_MAIL
        fi
fi

No hay comentarios: