Gerar backup do MySQL ou Postgres

Publicado por eli marques junior (última atualização em 11/10/2013)

[ Hits: 10.940 ]

Download backup-bd-rotate.tar.gz




Script para gerar backup do MySQL ou Postgres.

Nele você pode definir quantos dias você quer guardar os backups e os logs.

Extraia ele no / (raiz) e ele irá criar o diretório /var/bkp-banco-tsm.

Qualquer coisa renomeie o diretório para o nome desejado e altere no script.

  



Esconder código-fonte

!/bin/bash

#================================================================================#
#Autor: ELI MARQUES JUNIOR                                                       #
#Email: eli.marquesjunior@gmail.com                                              #
#Empresa: TM Solutions                                                           #
#Lotacao: GITECBR                                                                #
#Descricao: Gerar dump das bases de dados do PostgreSQL ou MySQL                 #
#================================================================================#

. /etc/profile
dir_local=/var/bkp-banco-tsm
dir_do_BKP=dump_bd
cd $dir_local/$dir_do_BKP

#==================================================================================
database=""
usuario=""
#Set a variavel abaixo caso utilize POSTGRES com senha
export PGPASSWORD=""
#Set a variavel abaixo caso utilize MYSQL com senha
senha=""

#==================================================================================
data_atual=`date +%s`
arquivo_gerado="$database-$data_atual.sql"
dir_bkp=bkp-SQL

dir_LOG=LOG
#LOG DE QUANDO DA CERTO
log_TRUST="$database"_"$data_atual".LOG
log_dump=$dir_LOG/$log_TRUST

#LOG QUANDO DA ERRO
errorLOG=error-"$database"_"$data_atual".LOG
LOG_ERROR=$dir_LOG/$errorLOG
#==================================================================================
#QUANTIDADE DE DIAS PARA MANTER OS LOGs
dias=4
guarda_Ndias=$(($data_atual -(${dias} * 86400)))


function gera_BKP()
 {
   mv $dir_bkp/$database-* dias_anteriores/
   ######## DUMP PARA O MYSQL
     #mysqldump -u $usuario -p$senha -B $database > $dir_bkp/$arquivo_gerado 2> $LOG_ERROR

   ######## DUMP PARA O POSTGRES
     pg_dump -Fc -b -U $usuario $database -f $dir_bkp/$arquivo_gerado 2> $LOG_ERROR

   ######## DUMP PARA O POSTGRES com SENHA
   ######## OPCAO ABORTADA POIS QUANDO COLOCAVA NO CRONTAB NAO FUNCIONAVA
   #  /usr/bin/expect -c "
   #    spawn /opt/postgres/9.1/bin/pg_dump -Fc -b -U $usuario -W $database -f $dir_bkp/$arquivo_gerado
   #    expect "Password:"
   #    send $senha
   #    send \r
   #    interact
   #  " > $log_dump 2>&1

    ######Parte comentada para o DUMP PARA O POSTGRESS
     if [ $? -eq 0 ]
       then
           echo "==================================================================================================================================" >> $log_dump
           echo "O backup do banco \"$database\" foi gerado em $(date +%d-%m-%y) e foi salvo no diretorio \"$dir_bkp/$arquivo_gerado\"" >> $log_dump
           echo "==================================================================================================================================" >> $log_dump

        else
           rm -f  $dir_bkp/$arquivo_gerado
           echo "=========================================================================================" >> $log_dump
           echo  "Nao foi gerado o backup do banco \"$database\" no dia $(date +%d-%m-%y)" >> $log_dump
           echo  "Verifique o arquivo \"$LOG_ERROR\" para saber o motivo" >> $log_dump
           echo "=========================================================================================" >> $log_dump
     fi

}


function limpa_LOG ()
  {
    cd $dir_LOG

    for x in $(ls)

        do

           local data=$(echo $x | cut -d "." -f1 | cut -d "_" -f2)
           if [ $data -le $guarda_Ndias ]
               then
                    # echo $data = $guarda_Ndias
                     rm -f $x
               else

                     echo Arquivo recente
                    # echo data do arquivo $data \> $guarda_Ndias data atual
           fi

    done
  }






function limpa_BANCO ()
  {
    cd ../dias_anteriores

    for x in $(ls)

        do

           local data=$(echo $x | cut -d "." -f1 | cut -d "-" -f2)
           if [ $data -le $guarda_Ndias ]
               then
                    # echo $data = $guarda_Ndias
                     rm -f $x
               else

                     echo BKP do banco $database recente
                     #echo data do arquivo $data \> $guarda_Ndias data atual
           fi

    done
  }

gera_BKP
limpa_LOG
limpa_BANCO
unset PGPASSWORD

Scripts recomendados

Script para pegar ip WAN para firewall com uma ou mais links de internet

Automatizando autenticação do Speedy Business

xadsl-setup

Adiciona, remove e lista usuários web (htpasswd)

Teste de memória RAM


  

Comentários
[1] Comentário enviado por alexlavalle em 03/02/2015 - 09:45h


Bom dia, tudo bem?

Estou com um problema com o script de backup das bases de mysql.
É o seguinte, quando eu mando fazer o backup executando o script na linha de comando, ele faz numa boa, porem, quando eu coloco ele no crontab, no final do backup ele me apresenta assim:
-rw-r--r-- 1 root root 20 2015-02-03 09:30 webprev_aparecidaprev20150203_09-30-56.tar (tipo, nao gera o backup).

Quando eu mando executar ele como disse via linha de comando, ele me mostra essa mensagem:

mysqldump: Error: 'You have an error in your SQL syntax near 'SELECT DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE' at line 1' when trying to dump tablespaces

mas mesmo apresentando a mensagem ele funciona.

Poderia me ajudar a resolver este problema? se vc quiser, eu te passo o script que estou usando.

abraços.

[2] Comentário enviado por zaitsev em 31/03/2017 - 16:24h

Estou com problemas com o script, fiz as alteraçoes e sempre da o erro "can't not open /etc/profile" mesmo estando como root.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts