User Tools

Site Tools


zz_deprecated:ovh_backup_tools

This is an old revision of the document!


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"
</code>
 
Variables a tener en cuenta:
^Nombre ^ Descripción ^
|DESTINATION|Donde irá el backup de ficheros|
|EXCLUDEFILES|Regex que contendrá los patrones de exclusión del backup|
|BACKUPDIRS|Fichero que contiene la lista de directorios de los que se hará backup (1 directorio por linea)|
|CHOWN|Dueño de los ficheros al terminar la ejecución del script|
|CHMOD|Permisos de los ficheros al terminar la ejecución del script|
 
=====Backup de Mysql=====
Se usa el script standard de mysql:
* [[Script_backup_mysql|Script para realizar y recuperar backups de mysql]]
 
=====Script Global=====
El script global como se puede apreciar, llama a los dos scripts anteriores:
<code>
#!/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
zz_deprecated/ovh_backup_tools.1328867912.txt.gz · Last modified: 2012/02/10 09:58 by dodger