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.986 ]
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
Lisa - sistema de backup com rsync
Backups de servidor CentOS com cPanel/WHM para servidor VPS Windows Server 2008
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
esqueci a senha do boot do notebook dell vostro 3300 (1)
PIP3 - erro ao instalar módulo do mariadb para o Python (7)
estou na 22.1 e não é atualizado pra 22.4 via "sudo full-upgrade&... (2)









