Backup de arquivos e banco de dados com envio de e-mail

Publicado por Perfil removido (última atualização em 20/04/2019)

[ Hits: 4.446 ]

Download Backup_Linux.txt




Objetivo do script: realizar um backup sincronizando os arquivos e base de dados de acordo com o dia da semana para um HD externo, enviando um e-mail após concluído, bem como se ocorrer algum erro durante o backup.

Exemplo do crontab:

00 22 * * 1-5 /bin/backup

** Necessário ajustar as variáveis do script.

  



Esconder código-fonte

#!/bin/bash
#/bin/backup

## Binários
SENDEMAIL="/usr/bin/sendEmail"
RSYNC="/usr/bin/rsync"
MYSQLDUMP="/usr/bin/mysqldump"
GZIP="/bin/gzip"
UMOUNT="/bin/umount"
MOUNT="/bin/mount"

## Váriaveis
SERVER_NAME=`/bin/hostname`
DIA_DA_SEMANA=`date '+%A'`
DATA=`date "+%d-%m-%Y"`
HORA=`date '+%H:%M'`
LOG="/var/log/backup/backup-$DATA.log"
EXT=`mount|grep /dev/sda1`
## Caminho de origem dos backups
### Caminho da pasta home
HOME="/home"

### Caminho da pasta dados
DADOS="/dados"

### Caminho da configuração do samba
SMB_CONF="/etc/samba/smb.conf"

### Caminho da configuração do mysql
MY_CNF="/etc/mysql/my.cnf"

## Caminho do hd externo para ser feito o backup
DESTINO="/media/hdexterno/$DIA_DA_SEMANA"

MOUNT_POINT="/media/hdexterno"
DISPOSITIVO="/dev/sda1"

### Configurações de e-mail
EMAIL_PRINCIPAL="email@empresa.com.br"
EMAIL_COPIA="email2@empresa.com.br"
EMAIL_ENVIO="alerta.empresa@gmail.com"
EMAIL_PASSWORD="senha_email"
SERVER_EMAIL="smtp.gmail.com:587"

function desmontar_hd(){
   $UMOUNT -l $MOUNT_POINT
   if [ $? != 0 ]; then
           envio_email "Erro ao desmontar o HD de backup - $SERVER_NAME" "Ocorreu um erro ao desmontar o HD de backup, verifique se o HD está funcionando corretamente."
      exit 1
   fi
}

function envio_email(){
        #$1 = Titulo do email
        #$2 = Mensagem do email
   
   ## Verifica o tamanho do LOG gerado
   if [ `/usr/bin/du $LOG|/usr/bin/cut -f 1` -gt 10000 ] 
   then
      ## Caso o LOG gerado tiver mais que 10M enviar email sem LOG
      $SENDEMAIL -f $EMAIL_ENVIO -cc $EMAIL_COPIA -t $EMAIL_PRINCIPAL -u "$1" -m "$2" -s $SERVER_EMAIL -xu $EMAIL_ENVIO -xp $EMAIL_PASSWORD
   else
      ## Caso o LOG gerado tiver 10M ou menos enviar o email com LOG
      $SENDEMAIL -f $EMAIL_ENVIO -cc $EMAIL_COPIA -t $EMAIL_PRINCIPAL -u "$1" -m "$2" -a $LOG -s $SERVER_EMAIL -xu $EMAIL_ENVIO -xp $EMAIL_PASSWORD
   fi
   exit 0
}

function backup_completo(){
   echo "Sincronizando arquivos em $1 para $2 -  `date '+%d/%m/%G %H:%M'`" >> $LOG
        $RSYNC --delete --log-file=$LOG -a $1 $2
}

function backup_mysql(){
   ## Backup de todas as bases de dados do banco de dados MySQL
   $MYSQLDUMP -u backup -pSenha_MySQL -x -e -A | $GZIP > $DESTINO/backup.sql.gz
}

function verifica_erro_backup(){
if [ $? != 0 ]; then
        envio_email "Erro no backup - $SERVER_NAME" "Ocorreu um erro no backup em $1, verifique se o HD está funcionando corretamente."
   desmontar_hd
   exit 1
fi
}

function montar_hd(){

if [ -z "$EXT" ]; then
   ##Montagem do HD externo
   $MOUNT $DISPOSITIVO $MOUNT_POINT
   ## Caso ocorra falha na montagem, enviar um e-mail avisando
   if [ $? != 0 ]; then
      echo "Ocorreu um erro ao montar o HD de backup, verifique se o HD está funcionando corretamente" >> $LOG
           envio_email "Erro ao montar o HD de backup - $SERVER_NAME" "Erro no HD de backup, verifique o LOG."
      ## Finaliza o script com erros
      exit 1
   fi
fi
}

echo "Iniciando os procedimentos de backup -  `date '+%d/%m/%G %H:%M'`" >> $LOG

## Monta o HD se o mesmo estiver disponivel
montar_hd

## Backup do diretório /home
backup_completo $HOME $DESTINO
verifica_erro_backup $HOME

## Backup do diretório /dados
backup_completo $DADOS $DESTINO
verifica_erro_backup $DADOS

## Backup da configuração do samba
backup_completo $SMB_CONF $DESTINO
verifica_erro_backup $SMB_CONF

## Backup da configuração do mysql
backup_completo $MY_CNF $DESTINO
verifica_erro_backup $MY_CNF

## Backup de todas as bases de dados mysql
backup_mysql
verifica_erro_backup "Banco de dados - base de dados MySQL"

desmontar_hd
echo "Backup finalizado - `date '+%d/%m/%G %H:%M'`" >> $LOG
envio_email "Backup realizado com sucesso - $SERVER_NAME" "O backup foi realizado com com sucesso."

## Finaliza o script com sucesso
exit 0

Scripts recomendados

Criptografando arquivos para enviar pra sua nuvem

Backup Ubiquiti com usuários e senhas SSH diferentes

Backup XML Pfsense

Backup utilizando rsync com envio do log e informativo via e-mail

Backup de Roteadores e Switches


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts