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