====== [SCRIPT] 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: #!/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 ^ |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: * [[dba: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: #!/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 ===== digraph Incremental { compund=true; subgraph cluster0 { Monday [shape=box]; Full [shape=doubleoctagon,label="Full Uncompressed backup"]; { rank = same; Monday; Full; } Monday->Full; } subgraph cluster1 { restofdays [shape=record,label="{Tuesday|...|Sunday}"]; find [shape=mdiamond]; config[shape=folder,label="Selected folders"]; zip[shape=mdiamond]; { rank = same; restofdays; find; config; zip; } restofdays->find; find->config; config->zip; } FTP[shape=box,label="OVH FTP"]; { rank = same; zip; FTP; } Monday->restofdays; restofdays->Monday; Full->FTP; zip->FTP; }