Escrevendo um simples script de backup para servidores

Publicado: agosto 26, 2008 em dicas, howto, programação

#!/bin/sh
#Para a checagem de Sintaxe use a opção −n. ex: #!/bin/sh -n
# Script de backup
# hachidbackupservers.sh − Faz backup de Servidores usando Rsync
### Inicialização das variáveis
#
#@autor: Richardson Lima
#@email2:securityfusion@gmail.com
#

#ROOT_UID=0      # Apenas os usuários com $UID 0 tem privilégios root.
#LINES=500       # Número padrão de linhas salvas.
#E_XCD=66        # Não é possível alterar o diretório?
#E_NOTROOT=67    # Non−root, saída erro.

### Habilite para depuração
# DEBUG=1 # depuração: 0 desliga, 1 liga
### função de depuração
#Debug(){ [ “$DEBUG” = 1 ] && echo “$*” ; }

#Servidores
MAILSERVER=’192.168.0.x’
MYSQLSERVER=’192.168.0.x’
SMBSERVER=’192.168.0.x’     # Servidor Samba
SVNSERVER1=’192.168.0.x’    # Servidor SVN1
SVNSERVER2=’192.168.0.x’    # Servidor SVN2
CVSSERVER=’192.168.0.x’     # Servidor CVS

### MAILSEVER
HOME_MAIL_TMP_DIR=’/algumDiretorio/bkp-mail/tmp-home-mail/’           # Diretório de armazenamento temporario
VAR_MAIL_TMP_DIR=’/algumDiretorio/bkp-mail/tmp-var-mail/’             # Diretório de armazenamento temporario
ETC_MAIL_TMP_DIR=’/algumDiretorio/bkp-mail/tmp-etc-mail/’             # Diretório de armazenamento temporario
BKP_MAIL_DIR=’/algumDiretorio/bkp-mail/’                              # Diretório de armazenamento dos compactados

### MYSQLSERVER
BACKUP_REMOTO_DIR1=’/algumDiretorio/bkp-mysql/’
BACKUP_REMOTO_DIR2=’/algumDiretorio/bkp-mysql/’
BACKUP_DIR1=’/algumDiretorio/bkp-mysql/’
BACKUP_DIR2=’/algumDiretorio/b-mysql/bkp-reserva-mysql/’
BACKUP_TMP_DIR1=’/algumDiretorio/bkp-mysql/tmp1′
BACKUP_TMP_DIR2=’/algumDiretorio/bkp-mysql/tmp2′

### CVS SEVER
CVSDIR=’/algumDiretorio/cvs/’
BKP_TMP_CVS=’/algumDiretorio/bkp-cvs/tmp-cvs/’
CVS_BKP_DIR=’/algumDiretorio/bkp-cvs’

### SVN SERVER 1
SVNDIR1=’/algumDiretorio/svn/’
BKP_TMP_SVN1=’/algumDiretorio/b-svn1/tmp-svn1/’
SVN1_BKP_DIR=’/algumDiretorio/b-svn1/’

### SVN SERVER 2
SVNDIR2=’/algumDiretorio/svn/’
BKP_TMP_SVN2=’/algumDiretorio/bkp-svn2/tmp-svn2/’
SVN2_BKP_DIR=’/algumDiretorio/bkp-svn2/’

### Data e Log
LOG=’/var/log/backup.log’
DATA=`date +%d-%m-%Y-%H.%M`

# Executar como root, claro!.
#if [ “$UID” −ne “$ROOT_UID” ]
#then
#   echo “Ops ! Somente o usuário root pode rodar este programa.”
#   exit $E_NOTROOT
#fi
# Teste se apresentar argumento de linha de comando (non−empty).
#then
#   lines=$1
#else
#   lines=$LINES # Padrão, se não especificado em linha de comando.
#fi

echo “—————————————”
echo “-  Iniciando backup do servidor MySQL -”
echo “—————————————”
echo

# 1
#ssh root@${MYSQLSERVER} ‘/usr/bin/mysqldump -u root -pCOLOCARSENHA –all-databases > /algumDiretorio/b-mysql/backupmysql.sql’
#ssh root@${MYSQLSERVER} ‘cd ${BACKUP_REMOTO_DIR1}’
#ssh root@${MYSQLSERVER} ‘tar -czvf bkpMysql-${DATA}.tar.gz backupmysql.sql’

rsync -Cravzp root@${MYSQLSERVER}:${BACKUP_REMOTO_DIR1}* ${BACKUP_TMP_DIR1} >> ${LOG} # transferindo o backup do Mysql para o servidor de backup
cd ${BACKUP_TMP_DIR1} && tar -czvf bkpMysql-${DATA}.tar.gz backupmysql.sql && cp *sql ${BACKUP_DIR1} && cp *.tar.gz ${BACKUP_DIR1}
echo ”  Procurando arquivos com mais de 7 dias para remoção  ”
find ${BACKUP_DIR1} -name “*.tar.gz” -ctime +7 -exec rm -vrf {} >> ${LOG} \;
echo “Limpando diretório temporario”
cd ${BACKUP_TMP_DIR1}* >> ${LOG} && rm -vrf *.sql *.tar.gz >> ${LOG}

# 2
#ssh root@${MYSQLSERVER} ‘/usr/bin/mysqldump -u root -pCOLOCARSENHA –all-databases > /algumDiretorio/b-mysql/backupmysql.sql’
#ssh root@${MYSQLSERVER} ‘cd ${BACKUP_REMOTO_DIR2}’
#ssh root@${MYSQLSERVER} ‘tar -czvf bkpMysql-${DATA}.tar.gz backupmysql.sql’

rsync -Cravzp root@${MYSQLSERVER}:${BACKUP_REMOTO_DIR2}* ${BACKUP_TMP_DIR2} >> ${LOG} # transferindo o backup do Mysql para o servidor de backup
cd ${BACKUP_TMP_DIR2} && tar -czvf bkpMysql-${DATA}.tar.gz backupmysql.sql  && cp *sql ${BACKUP_DIR2} cp *.tar.gz ${BACKUP_DIR2}
echo ”  Procurando arquivos com mais de 7 dias para remoção  ”
find ${BACKUP_DIR2} -name “*.tar.gz” -ctime +7 -exec rm -vrf {} >> ${LOG} \;
echo “Limpando diretório temporario”
cd ${BACKUP_TMP_DIR2}* >> ${LOG} && rm -vrf *.sql *.tar.gz >> ${LOG}

# mensagem de resultado
echo
echo “——————————————-”
echo “-          BACKUP DO SERVIDOR MySQL       -”
echo “-  Seu backup foi realizado com sucesso.  -”
echo “——————————————-”

echo “————————————–”
echo “-  Iniciando backup do servidor Mail -”
echo “————————————–”
echo

echo
mount /dev/md0 /algumDiretorio
montado=`mount | grep /algumDiretorio`
if [ -z “$montado” ]; then
exit 1
else
echo ”  Iniciando copia dos arquivos … ”
rsync -Cravzp root@${MAILSERVER}:/Diretorio/ ${HOME_MAIL_TMP_DIR} >> ${LOG}
rsync -Cravzp root@${MAILSERVER}:/Diretorio/ ${VAR_MAIL_TMP_DIR} >> ${LOG}
rsync -Cravzp root@${MAILSERVER}:/Diretorio/ ${PAGINA_MAIL_TMP_DIR} >> ${LOG}
rsync -Cravzp root@${MAILSERVER}:/Diretorio/ ${ETC_MAIL_TMP_DIR} >> ${LOG}
cd ${BKP_MAIL_DIR}
#if [ `pwd` != “$BKP_MAIL_DIR” ]  # or   if [ “$PWD” != “$BKP_MAIL_DIR” ]
# Não está em /algumDiretorio/b-mail/?
#then
# echo “Não é possível alterar $BKP_MAIL_DIR.”
# exit $E_XCD
#fi # Doublecheck no diretório, antes de brincar com arquivo de registro.

echo ”  Compactando os arquivos  …     ”
tar -czvf bkpHome-mail-${DATA}.tar.gz ${HOME_MAIL_TMP_DIR} >> ${LOG}
tar -czvf bkpVar-mail-${DATA}.tar.gz ${VAR_MAIL_TMP_DIR} >> ${LOG}
tar -czvf bkpHome-Pagina-mail-${DATA}.tar.gz ${PAGINA_MAIL_TMP_DIR} >> ${LOG}
tar -czvf bkpEtc-mail-${DATA}.tar.gz ${ETC_MAIL_TMP_DIR} >> ${LOG}
echo ”  Procurando arquivos com mais de 7 dias para remoção  ”
find ${BKP_MAIL_DIR} -name “*.tar.gz” -ctime +7 -exec rm -vrf {} >> ${LOG} \;
echo “Limpando diretório temporario”
rm -vrf ${HOME_MAIL_TMP_DIR}* >> ${LOG}
rm -vrf ${VAR_MAIL_TMP_DIR}* >> ${LOG}
rm -vrf ${PAGINA_MAIL_TMP_DIR}* >> ${LOG}
rm -vrf ${ETC_MAIL_TMP_DIR}* >> ${LOG}
# mensagem de resultado
echo
echo “——————————————-”
echo “-          BACKUP SEVIDOR-MAIL            -”
echo “-  Seu backup foi realizado com sucesso.  -”
echo “——————————————-”
echo
fi

echo
echo “———————————–”
echo “Iniciando backup do servidor SVN 1 ”
echo “———————————–”

echo
mount /dev/md0 /algumDiretorio
montado=`mount | grep /algumDiretorio`
if [ -z “$montado” ]; then
exit 1
else
echo “Iniciando copia dos arquivos … ”

rsync -Cravzp root@${SVNSERVER1}:${SVNDIR1} ${BKP_TMP_SVN1}
echo “Compactando os arquivos … ”
cd ${SVN1_BKP_DIR}

tar -czvf bkpSvn1-${DATA}.tar.gz ${BKP_TMP_SVN1} >> ${LOG}
echo “Procurando arquivos com mais de 7 dias para remoção”
find ${SVN1_BKP_DIR} -name “*.tar.gz” -ctime +7 -exec rm -vrf {} >> ${LOG} \;
echo “Limpando diretório temporario”
rm -vrf ${BKP_TMP_SVN1}* >> ${LOG}
# mensagem de resultado
echo
echo “———————————–”
echo ”     BACKUP SVN1 CONCLUIDO!        ”
echo “———————————–”
echo
fi

echo
echo “———————————–”
echo “Iniciando backup do servidor SVN 2 ”
echo “———————————–”

echo
mount /dev/md0 /algumDiretorio
montado=`mount | grep /algumDiretorio`
if [ -z “$montado” ]; then
exit 1
else
echo “Iniciando copia dos arquivos … ”

rsync -Cravzp root@${SVNSERVER2}:${SVNDIR2} ${BKP_TMP_SVN2}
echo “Compactando os arquivos … ”
cd ${SVN2_BKP_DIR}

tar -czvf bkpSvn2-${DATA}.tar.gz ${BKP_TMP_SVN2} >> ${LOG}
echo “Procurando arquivos com mais de 7 dias para remoção”
find ${SVN2_BKP_DIR} -name “*.tar.gz” -ctime +7 -exec rm -vrf {} >> ${LOG} \;
echo “Limpando diretório temporario”
rm -vrf ${BKP_TMP_SVN2}* >> ${LOG}
# mensagem de resultado
echo
echo “———————————–”
echo ”     BACKUP SVN2 CONCLUIDO!        ”
echo “———————————–”
echo
fi
#Enviando email de confirmacao

ssh root@${MAILSERVER} ‘/root/emailDoBackup.pl’

#Abaixo o conteudo do Script
#use MIME::Entity;

#$texto = “O servidor de backup realizou o backup com sucesso,em anexo o script de backup !”;

#$top = build MIME::Entity  From => ‘Root <root>’,
#                           To   =>   ‘suporte@domain’,
#                           Subject => “[Backup-Empresa] Confirmação do Backup “,
#                           Data => $texto;

# definindo o anexo
#$top->attach(
#            Name        => “backupscript.sh”,
#            Path        => “backupscript.sh”,
#Type        => “application/x-gtar”,
#            Encoding    => “base64″
#);

# caminho para o programa do agente MTA do seu servidor
#open(MAIL,”| /usr/lib/sendmail -t”);
#$top->print(\*MAIL);
#close(MAIL);

exit 0
# O valor zero é retornado após a saída do script
#+ Indica sucesso para o shell.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s