[Script] Backup Automático do MySQL no CentOs 6

Script que fiz juntamente com o Will de Souza para realizar o backup do banco de dados MYSQL em um servidor CentOs6.
O script vai, na ordem, verificar se o diretório de destino do backup existe, depois realizar o backup, fazer a retenção local de 7 dias, sincronizar com servidor de backup e por último enviar um e-mail com o log  com o procedimento que foi realizado.
Não existe (ainda) tratamento de erro para o script. A compactação foi realizada utitlizando o gzip. Para realizar o sincronização, é necessário autenticação sem senha utilizando certificados. Para saber como é feito, veja o post sobre o assunto: http://161.35.238.43/linux-conexao-ssh-sem-senha/
O envio do e-mail é feito utilizando o servidor postfix instalado localmente.
Para ser executado automaticamente, basta criar um arquivo e adicioná-lo ao Cron do servidor onde está o seu banco de dados.

Fiquem à vontade para modificar o script de acordo com a necessidade do seu servidor. Qualquer dúvida, sugestão e colaboração pode ser feita através dos comentários do blog.
Abraços e até a próxima.

#!/bin/bash
 
### Script para realizar o backup do banco de dados, compactar com gzip, reter os arquivos locais por de 7 dias, sincronizar com o servidor Storage e enviar um e-mail ao final ###
 
### Definindo as Variáveis ###
 
data=`date +%Y-%m-%d`
logbkp="/etc/bancos/backup/mysql/$data.log"             # Local onde o log ficará armazenado.
dircopy="/etc/bancos/backup/mysql/$data"                   # Diretório onde ficará armazenado o backup.
MySQLUser=root                                                                    # Usuário do banco de dados.
MySQLUserPW='senha123'                                                  # Senha do usuário do banco de dados.
listardbs=`mysql -S /var/lib/bancos/mysql/mysql.sock -N -s -u "${MySQLUser}" -p"${MySQLUserPW}" -e 'show databases;'`                         # Caminho do banco de dados e autenticação.
argumentos="--ignore-table=mysql.event --single-transaction -S /var/lib/bancos/mysql/mysql.sock"
email="usuariodoemail@email.com.br"                              # Endereço do e-mail para ser enviado o log.
echo "----------------------------------------------------" >> $logbkp
echo "[$data `date +%Hh:%Mm:%Ss`] Início do script de Backup do MySQL" | tee -a $logbkp
 
### Verificando o Diretório ###
 
if [ -d "$dircopy" ]; then
echo "[$data `date +%Hh:%Mm:%Ss`] Diretório $dircopy já existe" | tee -a $logbkp
else
echo "[$data `date +%Hh:%Mm:%Ss`] Criando diretório $dircopy" | tee -a $logbkp
mkdir $dircopy
fi
 
### Iniciando o Backup e Compactando com gzip ###
 
echo "[$data `date +%Hh:%Mm:%Ss`] Iniciando o Backup da Base de dados!" | tee -a $logbkp
 
for bancodedados in $listardbs; do
if [ $bancodedados != 'performance_schema' ] ; then
echo "[$data `date +%Hh:%Mm:%Ss`] Backup do $bancodedados" | tee -a $logbkp
mysqldump $argumentos -u "${MySQLUser}" -p"${MySQLUserPW}" $bancodedados > $dircopy/$bancodedados.sql
echo "[$data `date +%Hh:%Mm:%Ss`] Compactando o $bancodedados" | tee -a $logbkp
gzip -9 -f "$dircopy/$bancodedados.sql"
fi
done
 
echo "[$data `date +%Hh:%Mm:%Ss`] Fim do Backup!" | tee -a $logbkp
 
### Retenção e Sincronização ###
 
find $dircopy -iname '$data*' -type d -mtime +7 -exec rm -rf '{}' ';'
 
rsync -AagoPprzqe 'ssh -p 22' /etc/bancos/backup/mysql/* root@192.168.1.1:/BACKUP/BANCOS/MYSQL/  # Aqui coloca-se o endereço do servidor remoto de backup.
 
echo "[$data `date +%Hh:%Mm:%Ss`] Fim do script de Backup do MySQL." | tee -a $logbkp
echo "----------------------------------------------------" >> $logbkp
 
### Enviando o E-mail ###
 
lerlogbkp=`cat $logbkp`
echo "$lerlogbkp" | sendmail -F mysqlbackup-$data $email
echo "[$data `date +%Hh:%Mm:%Ss`] E-mail para $email enviado!"

Download do Script

4 comentários

  1. fui criar o script e apresentou o seguinte erro:

    line 15: erro de sintaxe próximo do `token’ não esperado `;&’
    line 15: `echo “————————————————————————————–” >> $logbkp’

    1. Olá, Wilter

      Isso se deve ao código html da página na hora de converter pro script
      Onde tem: echo “—————————————————-” & gt;& gt; $logbkp

      pode trocar pra echo “—————————————————-” >> $logbkp

    1. Olá luiz
      você diz a linha
      rsync -AagoPprzqe ‘ssh -p 22’ /etc/bancos/backup/mysql/* root@192.168.1.1:/BACKUP/BANCOS/MYSQL/ ?

      Se for, é o seguinte:
      Rsync é o aplicativo que vai mandar remotamente os arquivos de um servidor (local) para uma outra máquina (remota)
      No caso:
      o IP da máquina remota é 192.168.1.1;
      o usuário da maquina remota é o ROOT
      e o diretório onde será armazenado na máquina remota é o /BACKUP/BANCOS/MYSQL/

      Então se você quiser mandar para uma máquina remota sua (IP 10.10.10.25, Exemplo.), com o seu usuário e na sua pasta pessoal, a linha ficaria:

      rsync -AagoPprzqe ‘ssh -p 22’ /etc/bancos/backup/mysql/* luiz@10.10.10.25:/home/luiz/

      Caso não tenha ficado claro, pode mandar um email, ok?
      Abraços.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.