OVH Community, your new community space.

Backup incremental por FTP


djbuly
14/10/2008, 18:34
Muchas gracias por la info

Power
13/10/2008, 10:16
Hola

Después de instalar Duplicity en mi servidor, he puesto en marcha mi script /root/scripts/backup_duplicity/backup.sh que se arranca todas las noches mediante cron y me hace un backup diferencial y encriptado sobre el espacio FTP que da, gratuitamente, OVH.

Código:
#!/bin/bash

# Nos situamos en el directorio adecuado
cd /root/scripts/backup_duplicity

# Incluímos fichero de variables
source ./variables.sh

# Borramos fichero de mensajes
rm -f ${FICHERO_MENSAJES}

###################################### FUNCIONES ###############################################
mensaje(){
    DATE=`date +%Y-%m-%d\ %T`
    echo $DATE $1 >> ${FICHERO_MENSAJES}
    return 0
}

log(){
    DATE=`date +%Y-%m-%d\ %T`
    echo $DATE $1 >> ${FICHERO_LOG}
    return 0
}

dupli_home(){
    duplicity --full-if-older-than ${TIEMPO_BACKUP_TOTAL} /home/${CUENTA} ftp://${USUARIO_FTP}@${SERVIDOR_FTP}${DIR_BACKUP_HOME}/${CUENTA} >> ${FICHERO_MENSAJES}
}

dupli_borra_home(){
    duplicity remove-older-than ${TIEMPO_GUARDA_BACKUP} ftp://${USUARIO_FTP}@${SERVIDOR_FTP}${DIR_BACKUP_HOME}/${CUENTA} >> ${FICHERO_MENSAJES}
}

############################################ COMIENZO ###############################################33
log "Comienzo de Backup Duplicity - "
echo "====================================================================" >> ${FICHERO_MENSAJES}
mensaje "Comienzo de Backup Duplicity de ${MAQUINA}"
echo "====================================================================" >> ${FICHERO_MENSAJES}
mensaje ""

############################ BACKUP DE MYSQL ##############################################
log "Lectura de bases de datos de MySQL"
BASES="`mysql -B -N -e "show databases"| sed 's/ /%/g'`"

log "Crea directorio temporal ${DIR_TEMP_MYSQL}"
mkdir ${DIR_TEMP_MYSQL}

for BASE in $BASES
do
    log "Copia de BD ${BASE} a ${DIR_TEMP_MYSQL}"
    BASE="`echo ${BASE} | sed 's/%/ /g'`"
    mysqldump --quote-names --opt ${BASE} > ${DIR_TEMP_MYSQL}/${BASE}.sql
done

log "Backup remoto de MySQL"
echo "====================================================================" >> ${FICHERO_MENSAJES}
mensaje "Backup remoto de MySQL"
echo "====================================================================" >> ${FICHERO_MENSAJES}
duplicity --full-if-older-than ${TIEMPO_BACKUP_TOTAL} ${DIR_TEMP_MYSQL} ftp://${USUARIO_FTP}@${SERVIDOR_FTP}${DIR_BACKUP_MYSQL} >> ${FICHERO_MENSAJES}

log "Borrado de backup antiguos de MySQL"
echo "====================================================================" >> ${FICHERO_MENSAJES}
mensaje "Borrado de backup antiguos de MySQL"
echo "====================================================================" >> ${FICHERO_MENSAJES}
duplicity remove-older-than ${TIEMPO_GUARDA_BACKUP} ftp://${USUARIO_FTP}@${SERVIDOR_FTP}${DIR_BACKUP_MYSQL} >> ${FICHERO_MENSAJES}

log "Borra directorio temporal ${DIR_ENTRADA_MYSQL}"
rm -rfd ${DIR_TEMP_MYSQL}

############################ BACKUP DE CUENTAS DE HOME ##############################################
log "Lectura de cuentas de home"
CUENTAS=`ls -A1 /var/cpanel/users`

for CUENTA in $CUENTAS
do
    log "Backup remoto de cuenta ${CUENTA}"
    echo "====================================================================" >> ${FICHERO_MENSAJES}
    mensaje "Backup remoto de cuenta ${CUENTA}"
    echo "====================================================================" >> ${FICHERO_MENSAJES}
    dupli_home

    log "Borrado de backup antiguos de cuenta ${CUENTA}"
    echo "====================================================================" >> ${FICHERO_MENSAJES}
    mensaje "Borrado de backup antiguos de cuenta ${CUENTA}"
    echo "====================================================================" >> ${FICHERO_MENSAJES}
    dupli_borra_home
done

##################################### FIN ######################################################
unset ${PASSPHRASE}

log "Fin de backup_duplicity"
echo "====================================================================" >> ${FICHERO_MENSAJES}
mensaje "Fin de backup_duplicity"
echo "====================================================================" >> ${FICHERO_MENSAJES}
cat ${FICHERO_MENSAJES} | mail -s "Backup Duplicity ${MAQUINA}" ${EMAIL}
Hay un fichero /root/scripts/backup_duplicity/variables.sh que es donde tengo las variables específicas para los procesos de backup:

Código:
#!/bin/bash

export FTP_PASSWORD="password_ftp_OVH"
export PASSPHRASE="password_encriptación"

MAQUINA="mi_maquina"
EMAIL="mi_email"
USUARIO_FTP="usuario_ftp_OVH"
SERVIDOR_FTP="ftpbackx.ovh.net"
DIR_TEMP_MYSQL="/tmp/backup_mysql"
DIR_BACKUP_MYSQL="/duplicity/mysql"
DIR_BACKUP_HOME="/duplicity/home"
FICHERO_LOG="/var/log/backup_duplicity.log"
FICHERO_MENSAJES="mensajes"
TIEMPO_GUARDA_BACKUP="3M"
TIEMPO_BACKUP_TOTAL="1M"
Hace un fichero de backup (mediante mysqldump) de cada base de datos y después hace el backup de dichos ficheros al directorio /duplicity/mysql de espacio FTP de OVH.

Después hace el backup de cada /home/cuenta por separado al directorio /duplicity/home del servidor FTP de OVH
(Como uso cPanel, las cuentas de los usuarios, las extraigo de /var/cpanel/users)

Así es más fácil y rápido restaurar sólo el /home de una cuenta sin necesidad de transferir el /home completo del backup.

La primera vez que se ejecuta, tarda más porque tiene que hacer el primer backup completo.
Las siguientes veces sólo se transfieren las diferencias, por lo que es muy rápido.
Cada TIEMPO_BACKUP_TOTAL hace un nuevo backup total (por si se hubiese degradado el anterior).
Guardo los backups diarios durante el tiempo especificado en TIEMPO_GUARDA_BACKUP

Cuando ha terminado, me envía email con todas las estadísticas de los procesos realizados.
Y, aparte, guarda un log en /var/log/backup_duplicity.log

Como soy bastante novato en esto de hacer scripts en bash, he hecho el script fijándome y aprendiendo de otros scripts diversos que he visto.
Pero funciona perfectamente.

Eso sí, se admiten sugerencias para mejorarlo.

Saludos

virtual
12/10/2008, 00:32
No está nada mal, es un buen post.

web-a
12/10/2008, 00:28
Gracias por la información Power. Quería mirar algo parecido.

Power
10/10/2008, 16:40
Hola,

Tengo un servidor en OVH con CentOS + cPanel.
Hasta ahora utilizaba el backup de cPanel sobre el espacio FTP que proporciona OVH.

Pero el problema es que tarda bastantes horas en hacerse el backup completo de /home, ya que el backup por FTP de cPanel no tiene posibilidad de hacerse incremental (transfiriendo sólo las modificaciones).

Leyendo los foros de OVH-Francia encontré esto:
http://forum.ovh.com/showthread.php?t=39849

Hablan de un programa que es capaz de hacer backup incremental y encriptado sobre FTP.
El programa es Duplicity: http://duplicity.nongnu.org/
Y hay bastante información sobre el tema en otras webs:
http://www.ian-barton.com/Linux/Duplicity
http://www.debian-administration.org/articles/209

Me parece una idea muy práctica para hacer backups rápidos aprovechando el espacio FTP que brinda OVH.

Saludos