Backup bases de dados Firebird com envio via FTP e local

Publicado por Tacio de Jesus Andrade (última atualização em 08/07/2011)

[ Hits: 9.287 ]

Homepage: www.multiti.com.br

Download backupFirebird.sh




Este script foi criado por mim para resolver um grande problema, a criação de backups dos bancos de dados de uma das empresas onde estou prestando consultoria e serviços na área de informática.

Nela era necessário alem do backup normal, feito da base para outra maquina na rede ou para outro HD, fazer o backup em uma maquina remota fora da empresa, para maior segurança contra danos causados ao servidor ou até mesmo a todo o prédio.

Para resolver este problema, decidi fazer uma locação de um servidor web com um preço acessível (Hotel da Web) e fazer o backup do banco de dados em uma pasta do servidor por ftp (no meu caso preferi colocar em uma pasta protegida com senha (por um .htaccess), porem você pode optar por utilizar uma pasta acessível apenas por ftp).

Espero que este script ajude muitas pessoas que tenham algum problema parecido com o meu (ou não) e quem conseguir melhora-lo, por favor poste novamente ou me passe o link para melhorar o que está já em produção.

  



Esconder código-fonte

#!/bin/bash
##################################################################################
# Autor: Tácio de Jesus Andrade                                                  #
# Data de criação: 20/06/2011                                                    #
# Ultima modificação: 26/06/20                                                   #
# Função: Fazer o backup de bases de dados Firebird                              #
# Como usar: Jogue este script na pasta "/sbin" e após isso adicione no crontab: #
#            01 0 * * * /sbin/backupFirebird.sh                                    #
# Pré requisitos: Ter o Firebird, lftp, 7Zip e sendEmail, instalado no servidor, #
#            ou desativar no script o que não quiser utilizar.                   #
##################################################################################

# Variaveis do usuario e senha do firebird
user=SYSDBA
password=masterkey

# Variaveis para envio do log por e-mail (pré configurado para envio no Gmail)
emailServidor="@gmail.com"
senhaEmailServidor=""
smtp="smtp.gmail.com:587"
emailAdmin=""

# Variaveis das pastas de backup e tempo de duração do mesmo
tempoArquivamentoBackup=26
arquivoTemporario=/root/arquivosPresentes.txt
pastaDosBancosDeDados=/home/firebird/cpc/
pastaBackupLocal=/home/servidor/backupBancosDeDados/
backupAtual=backup_$(date +%Y-%m-%d).7z
arquivoDeLog=/var/log/backupFirebird.log

# Dados do servidor FTP
HOST_FTP="ftp.seu.dominio.com"
USUARIO_FTP="usuario"
SENHA_FTP="senha"
PASTA_BACKUP_FTP=public_html/arquivos/

# Lista de todos os arquivos de backup presentes atualmente na pasta de backups
ls -1 $pastaBackupLocal | sort > $arquivoTemporario

# Verifica quantos backups tem, caso tenha mais de $tempoArquivamentoBackup, pega o nome do ultimo
if [ `cat $arquivoTemporario | wc -l` -gt $tempoArquivamentoBackup ]
then
  backupAntigo=`cat $arquivoTemporario | head -n1`
else
  backupAntigo=""
fi

# Deleta o arquivo temporario com o nome dos arquivos de backup
rm $arquivoTemporario

# Acesso a pasta onde se encontra o .gdb ou .fdb
cd $pastaDosBancosDeDados

echo "Backup de `date +%Y-%m-%d` sendo iniciado" > $arquivoDeLog

# Comando que faz a criacao do backup dos bancos de dados
for i in * ; do
   echo "Backup do banco de dados `echo $i` iniciado, pausado o banco as `date +%c`" >> $arquivoDeLog
   # Para o acesso ao banco de dados
   gfix -shut -force 0 -user $user -password $password $i >> $arquivoDeLog
   # Otimiza a base de dados
   gfix -sweep -user $user -password $password $i >> $arquivoDeLog
   # Corrige os erros da base de dados se existirem
   gfix -mend -full -user $user -password $password $i >> $arquivoDeLog
   # Faz o backup da base
   gbak -backup -ignore -user $user -pas $password $i backup/`echo $i`.gbk >> $arquivoDeLog
   #Reinicia o acesso a base de dados
   gfix -online -user $user -password $password $i >> $arquivoDeLog
   echo "Backup do banco de dados `echo $i` concretizado com sucesso e banco de dados reativado as `date +%c`" >> $arquivoDeLog
done

# Compacta o backup feito e oculta os arquivos e indices de compressão
7zr a $backupAtual backup/* >> $arquivoDeLog

# Testa se o arquivo está corrompido, se tiver ele compacta novamente o backup
if [ -n `7zr -t $backupAtual |  grep "Everything is OK"` ]
then
  echo "O backup anterior está corrompido, criando novo backup" >> $arquivoDeLog
  7zr a $backupAtual backup/* >> $arquivoDeLog
fi

# Deleta os arquivos de backup depois de compactados e testado
rm  /home/firebird/cpc/backup/*

# Envia backup para maquina na rede
cp $backupAtual $pastaBackupLocal


# Vefica se existe ou não backup para ser deletado
if [ $backupAntigo -eq "" ]
then
# Acessa o FTP e envia o arquivo de backup compactado
echo "Inicio do envio do backup por FTP iniciado as `date +%c`" >> $arquivoDeLog
  lftp <<FTP
    open $HOST_FTP
    user $USUARIO_FTP $SENHA_FTP>/dev/null
    cd $PASTA_BACKUP_FTP
    put $backupAtual
    bye
FTP
echo "Fim do envio do backup por FTP as `date +%c`" >> $arquivoDeLog

# Caso exista um backup antigo a ser removido ele remove o arquivo do ftp e do disco
else
  lftp <<FTP
    open $HOST_FTP
    user $USUARIO_FTP $SENHA_FTP>/dev/null
    cd $PASTA_BACKUP_FTP
    rm $backupAntigo
    put $backupAtual
    bye
FTP
echo "Fim do envio do backup por FTP as `date +%c`" >> $arquivoDeLog
# Deleta o backup antigo do HD
rm $pastaBackupLocal$backupAntigo  2> /dev/null
echo "Arquivo `echo $backupAntigo` foi removido!"

fi

# Deleta o backup do dia depois de envia-lo via ftp
rm /home/firebird/cpc/$backupAtual

echo "Backup finalizado!" >> $arquivoDeLog

# Envia um e-mail avisando do sucesso do backup
sendEmail -f $emailServidor -t $emailAdmin -u "Backup `date +%Y-%m-%d`" -m "Backup do dia `date +%Y-%m-%d` feito e log em anexo" -a $arquivoDeLog -s $smtp -xu $emailServidor -xp $senhaEmailServidor > /dev/null

################# Para recuperar o banco de dados #################
#for i in * ; do
# Faz o backup da base
#   gbak-1.5 -create -v $i $i.GDB
#done

Scripts recomendados

FIREWALL COM IPTABLES

Teste de desempenho com números primos em BASH

Firewall - IPTABLES

Backup com data no nome do arquivo

Loadbalance


  

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