Considero essa forma a mais eficiente e elegante de se fazer um backup. Pois é um backup automático incremental com controle de versão e gera logs para controle/monitoramento.
Utilizo para isso os softwares LIVRES: SSH, CRON, RSYNC. A ideia é ter dois servidores o de produção e o de backup, o servidor de backup deve fazer semanalmente uma copia de varias pastas do servidor da produção. Cada copia deve ser datada e ter um arquivo do log da copia também datado. Essas copias são na verdade copias com hardlink do Linux a ideia é copiar o conteúdo do ultimo backup para um nova pasta com “cp -l ” e depois atualizar ela com o servidor usando o rsync, assim teremos um backup incremental e versionado por data! Sem falar que economizamos muito espaço em disco, banda de rede e tempo de backup com esse procedimento.
ver : http://www.vivaolinux.com.br/artigo/Backups-remotos-com-rSync-e-chaves-SSH
Por partes:
1 – SSH com autenticação via chaves publica/privada:
http://ramonrdm.wordpress.com/2011/08/16/autenticacao-com-chaves-publicaprivada-no-ssh/
2 – Instalação do Rsync:
4 – Criação do script de backup
bkp incremental hardlinks:
#!/usr/bin/env bash
#
# Faz backups incrementais de diretorios em um servidor remoto utilizando rsync e
# hardlinks para economia de banda e espaço em disco.
#
# Por Vinicius Figueiredo <viniciusfs [arroba] gmail.com>
# Dominio Publico
#
SERVER="servidor.com.br"
DIRS_TO_COPY="/var/www /etc"
BACKUP_DIR="/backup"
RETENTION=15
DATE=`date +%Y%m%d`
LOG="${0}_${DATE}.log"
CURRENT_BACKUP="${BACKUP_DIR}/${DATE}"
echo "Iniciando script em `date`" > ${LOG}
if [ -e ${BACKUP_DIR}/last ]; then
LAST_BACKUP=`cat ${BACKUP_DIR}/last`
if [ -d ${LAST_BACKUP} ]; then
echo "Ultimo backup encontrando, linkando arquivos..." >> ${LOG}
cp -la ${LAST_BACKUP} ${CURRENT_BACKUP} >> ${LOG} 2>&1
fi
else
echo "Nenhum backup anterior encontrado, criando diretorio para backup atual..." >> ${LOG}
mkdir ${CURRENT_BACKUP} >> ${LOG} 2>&1
fi
for dir in ${DIRS_TO_COPY}; do
echo "Iniciando backup de ${SERVER}:${dir}" >> ${LOG}
rsync -av --delete ${SERVER}:${dir} ${CURRENT_BACKUP} >> ${LOG} 2>&1
done
echo ${CURRENT_BACKUP} > ${BACKUP_DIR}/last
for dir in `find ${BACKUP_DIR} -maxdepth 1 -type d -mtime +${RETENTION}`; do
echo "Removendo backup ${dir}" >> ${LOG}
rm -rf ${dir} >> ${LOG} >> ${LOG} 2>&1
done
5 – Automatizando o backup com o Cron
http://ramonrdm.wordpress.com/2011/09/06/cron-agendando-tarefas/
Usando rsync:
http://servidorlinux.wordpress.com/2008/02/02/backup-com-rsync-sem-senha/
http://www.vivaolinux.com.br/artigo/Backup-com-Rsync
http://www.vivaolinux.com.br/artigo/Sistema-de-backup-com-rsyncd
Incremental:
http://www.ultrav.com.br/2008/11/11/backup-incremental-com-rsync-e-hardlinks/
http://blog.liquuid.net/2008/05/11/time-machine-no-linux-com-rsync/
outra opcao:
http://www.dicas-l.com.br/arquivo/script_shell_de_backup_incremental.php
http://www.dicas-l.com.br/cantinhodoshell/cantinhodoshell_20070130.php
http://www.jveweb.net/en/archives/2011/02/using-rsync-and-cron-to-automate-incremental-backups.html