Backup de arquivos e banco de dados com envio de e-mail
Publicado por Perfil removido (última atualização em 20/04/2019)
[ Hits: 5.056 ]
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.
#!/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
Script de Backup do Perfil dos Usuários do Sistema em Batch do Windows
Backup do PostgreSQL 8.3 e aviso por e-mail
Backup dinâmico de banco de dados MySQL
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como bloquear pendrive em uma rede Linux
Um autoinstall.yaml para Ubuntu com foco em quem vai fazer máquina virtual
Instalar GRUB sem archinstall no Arch Linux em UEFI Problemático
Como impedir exclusão de arquivos por outros usuários no (Linux)
Formas seguras de instalar Debian Sid (10)
Alguém executou um rm e quase mata a Pixar! (6)
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (12)
Alguém pode me indicar um designer freelancer? [RESOLVIDO] (5)
Por que passar nas disciplinas da faculdade é ruim e ser reprovado é b... (6)









