User Tools

Site Tools


ovh_backup_tools

Descripción

Conjunto de scripts para realizar un backup al ftp para backups que provee OVH.

Funcionamiento

El conjunto consta de 3 scripts, uno para ficheros, uno para MySQL (ya publicado) y otro que lanza ambos y los sube al servidor.

Petición de espacio

El espacio para backups se puede pedir a OVH mediante el Manager:

 Servidor -> Servicios -> Gestión de Backups -> Backup FTP

Backup de Ficheros

El script es muy simple, al finalizar dejará un fichero comprimido conteniendo todos los directorios que son objetivo del backup:

backup_files.sh
#!/bin/bash
 
echo "Backup Script by dodger!"
 
 
# This var contains the destination dir where all will be stored!
#       be sure to has full access to this dir!
DESTINATION="/home/backup/files/"
 
# Escluded files
#EXCLUDEFILES=".[Bb][aA][kK] [cC]ache tmp"
EXCLUDEFILES=".[Bb][aA][kK] tmp"
EXCLUDEFILE="/tmp/excludefile.tmp"
 
# date SHOT!
MYDATE=`date +%Y%m%d`
 
SERVERNAME=`uname -a | awk '{ print $2 }'`
BACKUPFILE=$DESTINATION"/"$SERVERNAME"_"$MYDATE".tar.gz"
LOGFILE=$DESTINATION"/"$SERVERNAME"_"$MYDATE".log"
EXCLUDED=$DESTINATION"/"$SERVERNAME"_"$MYDATE".excluded"
 
# this var contains all the desired backed-up dirs all in 1 line separated by spaces
#       example: "/etc /home /my/preferred/dir"
BACKUPDIRS="$(dirname $0)/$(basename $0 .sh).dirs"
 
 
# chown and chmod permission for files
CHOWN="root:admins"
CHMOD="440"
 
rm -f $EXCLUDEFILE 2>> $LOGFILE
for i in $(cat $BACKUPDIRS)
do
        echo $i
        for j in $EXCLUDEFILES
        do
                find $i -name "*$j*" >> $EXCLUDEFILE
        done
done
 
echo "Backing up your selected dirs ($BACKUPDIRS), this will take a while"
echo "file will be: $BACKUPFILE"
echo "log will be: $LOGFILE"
 
echo "Taring"
for i in $(cat $BACKUPDIRS)
do
        if [[ "$AUXDIR" ]]
        then
                AUXDIR="$AUXDIR $i"
        else
                AUXDIR="$i"
        fi
done
echo $AUXDIR
nice --adjustment=19 tar czfv "$BACKUPFILE" --exclude-from=$EXCLUDEFILE $AUXDIR > "$LOGFILE" 2>> $EXCLUDED
 
cat $EXCLUDEFILE >> $EXCLUDED
rm -f $EXCLUDEFILE 2>> $LOGFILE
 
find $DESTINATION -type f -exec chmod $CHMOD {} \;
find $DESTINATION -type f -exec chown $CHOWN {} \;
 
echo "Ok, all done, you can read the log file in:"
echo "  ->$LOGFILE"

Variables a tener en cuenta:

Nombre Descripción
DESTINATIONDonde irá el backup de ficheros
EXCLUDEFILESRegex que contendrá los patrones de exclusión del backup
BACKUPDIRSFichero que contiene la lista de directorios de los que se hará backup (1 directorio por linea)
CHOWNDueño de los ficheros al terminar la ejecución del script
CHMODPermisos de los ficheros al terminar la ejecución del script

Backup de Mysql

Se usa el script standard de mysql: * Script para realizar y recuperar backups de mysql

Script Global

El script global como se puede apreciar, llama a los dos scripts anteriores:

backup_ovh_ftp.sh
#!/bin/bash
BACKUPFILES="/home/root/backup/backup_files.sh"
BACKUPMYSQL="/home/root/backup/backup_mysql.sh"
BACKUPFILESDIR="/home/backup/files"
BACKUPMYSQLDIR="/home/backup/mysql"
WORKDIR="/home/backup/ftp_backup"
MYDATE="$(date +%Y%m%d)"
 
LFTPSCRIPT="$WORKDIR/$MYDATE.lftp"
FTPUSER="ksXXXXX.ovh.com"
FTPPASSWD="PASSWORD"
FTPSERVER="ftp-server"
 
HISTORIC="$(dirname $0)/$(basename $0 .sh).historic"
let MAXBACKUPS=20
 
 
check_dirs()
{
        if ! [ -d $WORKDIR ]
        then
                mkdir -p $WORKDIR/$MYDATE
        else
                if [ -d $WORKDIR/$MYDATE ]
                then
                        rm -fr $WORKDIR/$MYDATE
                fi
                mkdir -p $WORKDIR/$MYDATE
        fi
}
 
 
do_backups()
{
        $BACKUPFILES
        $BACKUPMYSQL
 
        find $BACKUPFILESDIR -type f -name "*$MYDATE*" -exec cp -fv {} $WORKDIR/$MYDATE/ \;
        find $BACKUPMYSQLDIR -type f -name "*$MYDATE*" -exec cp -fv {} $WORKDIR/$MYDATE/ \;
}
 
 
 
upload_backup()
{
        echo "set dns:cache-enable off" > $LFTPSCRIPT
        echo "open -p 21 $FTPSERVER" >> $LFTPSCRIPT
        echo "user $FTPUSER $FTPPASSWD" >> $LFTPSCRIPT
        echo "lcd $WORKDIR" >> $LFTPSCRIPT
        echo "mirror -Rc $MYDATE" >> $LFTPSCRIPT
 
        lftp -f $LFTPSCRIPT
        rm -fr $WORKDIR/$MYDATE
        echo $MYDATE >> $HISTORIC
}
 
purge_backup()
{
        let LINES=$(cat $HISTORIC | wc -l)
        let HEAD=0
        if [ $LINES -gt $MAXBACKUPS ]
        then
                echo "COMPROBAR PURGADO BACKUP FTP" | mail -s "comprobacion" YOUR_MAIL@DOMAIN.com
                let HEAD=$LINES-$MAXBACKUPS
                echo "set dns:cache-enable off" > $LFTPSCRIPT
                echo "open -p 21 $FTPSERVER" >> $LFTPSCRIPT
                echo "user $FTPUSER $FTPPASSWD" >> $LFTPSCRIPT
 
                for i in $(head -$HEAD $HISTORIC)
                do
                        echo "rm -fr $i" >> $LFTPSCRIPT
                done
 
                lftp -f $LFTPSCRIPT
        fi
}
 
check_dirs
do_backups
upload_backup
purge_backup

Variables a tener en cuenta:

Nombre Descripción
BACKUPFILES="/home/root/backup/backup_files.sh"
Path al script de backup de ficheros
BACKUPMYSQL="/home/root/backup/backup_mysql.sh"
Path al script de backup de MySQL
BACKUPFILESDIR="/home/backup/files"
Donde se almacenan los backups de ficheros
BACKUPMYSQLDIR="/home/backup/mysql"
Donde se almacenan los backups de MySQL
WORKDIR="/home/backup/ftp_backup"
Directorio temporal de trabajo
FTPUSER="ksXXXXX.ovh.com"
Usuario del ftp de backups (provisto por OVH)
FTPPASSWD="PASSWORD"
Password del ftp de backups (provisto por OVH)
FTPSERVER="ftp-server"
Servidor ftp de backups (provisto por OVH)
let MAXBACKUPS=20
Máximo número de backups que se conservarán en el Ftp

New version WIP

Concept

ovh_backup_tools.txt · Last modified: 2012/04/16 17:32 by dodger