Restauração de backup Firebird a partir de um arquivo .7Z contendo um GBK

Publicado por G. Magalhaes (última atualização em 24/07/2018)

[ Hits: 2.449 ]

Download 6868.viva_restauracaodobackup.sh




Saudações a todos!

Script para restauração de backup Firebird a partir de um arquivo .7Z contendo um arquivo GBK que irá gerar um arquivo FDB. Sistema CentOS 7 32 Bits (sim, existem CentOS 7 32 bits) com Firebird 2.56 versão SuperServer.

Autor: AgOfEarth, submetido ao Viva o Linux - https://www.vivaolinux.com.br/ em 24 de julho de 2018.

Continuando o artigo:

http://www.vivaolinux.com.br/script/Backup-compactacao-verificacao-e-transferencia-de-arquivos/

Vamos, no CentOS 7 32 bits, através do Firebird Superserver, restaurar o backup de uma base de dados salva num local específico no Firebird SuperServer e novamente tudo será registrado em um LOG que fica na máquina e também enviado por email.

Pré-requisitos:

- CentOS 7 32 bits (espero publicar em breve um artigo de como instalar o desconhecido CentOS 32bits. Deve funcionar no 64 bits normalmente, mas não testei, faça-o por sua conta e risco)
- Firebird SuperServer (no CentOS 32 bits não é automática a instalação, já que o 32 bits não possui os repositórios padrões e isso também será abordado no artigo de instalação do sistema 32 bits)
- 7zip
- mail
- Samba

Ressalvas:

1) Usei este script por muito tempo e nunca tive nenhum problema e tentei cercar algumas eventuais mensagens de erro/alertas do Firebird, mesmo assim use-o por sua conta e risco, se der algum problema não tenho culpa não ;-) ! Claro nunca se deve testar na base de produção antes de ter certeza do que está fazendo.

2) Lembre-se de adicionar o script ao seu crontab. No meu caso usei, como root o comando "crontab -e". Ao tentar editar o /etc/crontab não deu certo, mas não procurei entender o porquê.No terminal, como root, digite "crontab -e" e insira algo do tipo:

00 22 * * MON-SAT /root/vivaobackup.sh

Neste caso, todos os dias às 22 horas em ponto (00) de todos os dias (*) de todos os meses (*) de segunda (MON) a sábado (SAT) executo o script que está no /root/.

3) Este script funciona "em série" com o script citado acima, portanto o horário que deve constar no crontab deve levar em conta que todo o processo do outro script esteja terminado, caso contrário haverá erro devido ao fato do back-up não existir ou ainda de estar em uso pelo outro script!

4) Gostaria de agradecer a todos de todas as comunidade de onde tirei alguma informação e se não cito uma bibliografia em particular, deve-se ao fato de que estou criando este tipo de script a bastante tempo antigamente para o CENTOS 6.5 e desta vez apenas atualizei o script.

Abraços a todos.

  



Esconder código-fonte

#Script para restauração de backup Firebird a partir de um arquivo .7Z contendo um arquivo GBK que irá gerar um  arquivo FDB. Sistemas Centos 7 32 Bits (sim, existem Centos 7 32 bits) com Firebird 2.56 versão SuperServer.

#Autor AgOfEarth submetido ao Viva o Linux - https://www.vivaolinux.com.br/ em 24 de julho de 2018.

#Continuando o artigo: http://www.vivaolinux.com.br/script/Backup-compactacao-verificacao-e-transferencia-de-arquivos/, vamos, no Centos 7 32 bits através do Firebird Superserver, restaurar o back-up de uma base de dados salvada num local específica no Firebird SuperServer e novamente tudo será registrado em um LOG que fica na máquina e também enviado por email.

#Pre-Requisitos:
#- Centos 7 32 bits (espero publicar em breve um artigo de como instalar o desconhecido Centros 32bits. Deve funcionar no 64 bits normalmente, mas não testei, faça-o por sua conta e risco.)
#- Firebird SuperServer ( no Centos 32 bits não é automática a instalação já que o CENTOS 32 bits não possui os repositórios padrões e isso também será abordado no artigo de instalação do CENTOS 32 bits)
#- 7zip
#- mail
#- Samba

#Ressalvas: 

#1) Usei este script por muito tempo e nunca tive nenhum problema e tentei cercar algumas eventuais mensagens de erro/alertas do Firebird, mesmo assim use-o por sua conta e risco, se der algum problema não tenho culpa não ;-) ! Claro nunca se deve testar na base de produção antes de ter certeza do que está fazendo.

#2) Lembre-se de adicionar o script ao seu crontab. No meu caso usei, como root o comando "crontab -e". Ao tentar editar o /etc/crontab não deu certo, mas não procurei entender o porquê.No terminal, como root, digite "crontab -e" e insira algo do tipo:
# 00 22 * * MON-SAT /root/vivaobackup.sh
# Neste caso, todos os dias aas 22 horas em ponto (00) de todos os dias (*) de todos os meses (*) de segunda (MON) a sábado (SAT) executo o script que está no /root/.

#3) Este script funciona "em série" com o script citado acima, portanto o horário que deve constar no crontab deve levar em conta que todo o processo do outro script esteja terminado, caso contrário haverá erro devido ao fato do back-up não existir ou ainda de estar em uso pelo outro script!

#4) Gostaria de agradecer a todos de todas as comunidade de onde tirei alguma informação e se não cito uma bibliografia em particular, deve-se ao fato de que estou criando este tipo de script a bastante tempo antigamente para o CENTOS 6.5 e desta vez apenas atualizei o Script.


#!/bin/bash
modo_teste=0

#No meu caso,  o arquivo de backup é muito grande e sempre obedece uma regra específica, portanto tenho como localizá-lo, mas é útil poder apontar para um arquivo com nome diferente. Claro que ele deverá estar compactado em 7z e lá dentro deverá ser um GBK com o mesmo prefixo. Abaixo procure a linha que contenha o teste: "$modo_teste -eq 0"


INICIO=`date +%Y/%m/%d-%H:%M:%S`

#===================== VERIFICA A EXISTENCIA DE ARQUIVO DE LOG, SE EXISTE É REMOVIDO=======================================

if [ -e /root/`date +%Y-%m-%d`.txt ];
then
   rm -rf /root/`date +%Y-%m-%d`.txt
fi
#===================== FIM VERIFICA A EXISTENCIA DE ARQUIVO DE LOG, SE EXISTE É REMOVIDO =======================================
LOG=/root/`date +%Y-%m-%d`.txt
LOG_temp=/root/log_temp.txt

ANO=`date +%Y`
MES=`date +%m`
DIA=`date +%d` 
DIA_SEMANA=`date +%w`
case $DIA_SEMANA in
0) DIA_SEMANA='Domingo';
;;
1) DIA_SEMANA='Segunda';
;;
2) DIA_SEMANA='Terca';
;;
3) DIA_SEMANA='Quarta';
;;
4) DIA_SEMANA='Quinta';
;;
5) DIA_SEMANA='Sexta';
;;
6) DIA_SEMANA='Sabado';
;;
esac

#Procurando onde o 7zip foi instalado... lembrando, fiz este script para o CENTOS.

if [ -e /usr/bin/7z ]
then
   compactador=1
else
   if [ -e /usr/bin/7za ]
   then
      compactador=2
   else
      compactador=3
   fi
fi

# Sempre testemos antes...
# Neste modo teste podemos pegar o back-up de uma base pequena tal a employee.fdb que já vem no firebird
# No meu caso este arquivo fica em: /var/lib/firebird/data/employee.fdb
# Gere o backup dele e compacte em 7z para que o script o encontre

if [ $modo_teste -eq 0 ]
then
prefixo=`echo $ANO$MES$DIA'Bk'$DIA_SEMANA`
else
prefixo=`echo 'NOME_PREFIXO_DE_TESTE'`
fi

echo -e "prefixo: $prefixo" >> $LOG

arquivo_original_7z=`echo $prefixo'.7z'`
echo -e "arquivo_original_7z: $arquivo_original_7z" >> $LOG
pasta_arquivo_original_7z=`echo '/bk/tmp_7z/'`
echo -e "pasta_arquivo_original_7z: $pasta_arquivo_original_7z" >> $LOG
caminho_arquivo_original_7z=`echo $pasta_arquivo_original_7z$arquivo_original_7z`
echo -e "caminho_arquivo_original_7z: $pasta_arquivo_original_7z$arquivo_original_7z" >> $LOG
pasta_final_arquivo_original_7z=`echo '/bk/'`
echo -e "pasta_final_arquivo_original_7z: $pasta_final_arquivo_original_7z" >> $LOG
caminho_final_arquivo_original_7z=`echo $pasta_final_arquivo_original_7z$arquivo_original_7z`
echo -e "caminho_final_arquivo_original_7z: $caminho_final_arquivo_original_7z" >> $LOG



arquivo_intermediario_gbk=`echo $prefixo'.gbk'`
echo -e "arquivo_intermediario_gbk: $arquivo_intermediario_gbk" >> $LOG
pasta_arquivo_intermediario_gbk=`echo '/bk/'`
echo -e "pasta_arquivo_intermediario_gbk: $pasta_arquivo_intermediario_gbk" >> $LOG
caminho_arquivo_intermediario_gbk=`echo $pasta_arquivo_intermediario_gbk$arquivo_intermediario_gbk`
echo -e "caminho_arquivo_intermediario_gbk: $caminho_arquivo_intermediario_gbk" >> $LOG


arquivo_final_fdb=`echo 'NOME_EMPRESA_RESTAURADO.fdb'`
echo -e "arquivo_final_fdb: $arquivo_final_fdb" >> $LOG
pasta_arquivo_final_fdb=`echo '/nfd5/'`
echo -e "pasta_arquivo_final_fdb: $pasta_arquivo_final_fdb" >> $LOG
caminho_arquivo_final_fdb=`echo $pasta_arquivo_final_fdb$arquivo_final_fdb`
echo -e "caminho_arquivo_final_fdb: $caminho_arquivo_final_fdb" >> $LOG

#=================== PARANDO SERVIÇOS ANTES DE COMEÇAR A RESTAURACAO DO BACK-UP ===============================================================
#=================== FALTA COLOCAR COMANDOS PARA VERIFICAR ERRO AO SE PARA CADA UM DESTES SERVIÇOS E ENVIO DE MENSAGEM ATRAVÉS DE LOG
systemctl start firebird-superserver
echo -e "`date +%H:%M:%S` Inciciando restauracao do back-up do NOME_EMPRESA_RESTAURADO.fdb - $DIA/$MES/$ANO, $DIA_SEMANA-feira, no servidor 123.123.123.70" >> $LOG
systemctl stop smb
echo -e "`date +%H:%M:%S` Compartilhamento parado......................: systemctl smb stop" >> $LOG
systemctl restart firebird-superserver
echo -e "`date +%H:%M:%S` Firebird reiniciado..........................: systemctl restart firebird-superserver" >> $LOG
#=================== FIM PARANDO SERVIÇOS ANTES DE COMEÇAR RESTAURAÇÃO DO BACK-UP ===============================================================

   LOG_temp=/root/log_temp.txt
#=================== COLOCAR TESTE PARA VERIFICAR O TAMANHO DO ARQUIVO COM BASE NO ARQUIVO .GBK E / OU NA PRESENCA DE TEXTO NO ARQUIVO DE LOG DE ERRO NO 7z
if [ -e $caminho_arquivo_original_7z ];
then
   echo -e "`date +%H:%M:%S`Arquivo $arquivo_original_7z localizado.\nVerificando integridade do arquivo $arquivo_original_7z" >> $LOG
   echo -e "++++++++++++++++++++++++++LOG do UN7z+++++++++++++++++++++++++++++++" >> $LOG
   LOG_un7z=/root/log_un7z.txt
   echo -e "Achei $arquivo_original_7z e vou DEScompactar!" >> $LOG_temp
   
   
   
   if [ $compactador -eq 1 ]
   then
      7z e -aoa $caminho_arquivo_original_7z -o$pasta_arquivo_intermediario_gbk &> $LOG_un7z
      echo -e "[`date +%Y`/`date +%m`/`date +%d` - `date +%H`:`date +%M`:`date +%S`] 7z e -aoa $caminho_arquivo_original_7z -o$pasta_arquivo_intermediario_gbk &> $LOG_un7z" >> $LOG
   else
      if [ $compactador -eq 2 ]
      then
         7za x -aoa $caminho_arquivo_original_7z -o$pasta_arquivo_intermediario_gbk &> $LOG_un7z
         echo -e "[`date +%Y`/`date +%m`/`date +%d` - `date +%H`:`date +%M`:`date +%S`] 7za x -aoa $caminho_arquivo_original_7z -o$pasta_arquivo_intermediario_gbk &> $LOG_un7z" >> $LOG
      else
         echo -e "NAO FOI LOCALIZANDO NEM O COMPACTADOR 7Z NEM O 7ZA, INSTALE-O!!!" >> $LOG
      fi
   fi
   
   
   
   
   echo -e "Descompactei" >> $LOG_temp
   cat $LOG /root/log_un7z.txt > $LOG_temp
   rm -rf $LOG_un7z
   echo -e "++++++++++++++++++++++FIM DO LOG do UN7z++++++++++++++++++++++++++++" >> $LOG_temp
   rm -rf $LOG_un7z
   rm -rf /root/log_un7z.txt
   cat $LOG_temp > $LOG
   rm -rf $LOG_temp
   LOG_temp=/root/log_temp.txt
   ERRO_DESCOMPACTACAO=0
   mv $caminho_arquivo_original_7z $caminho_final_arquivo_original_7z
else
   echo -e "NAO FOI POSSIVEL VERIFICAR A INTEGRIDADE DO ARQUIVO $caminho_arquivo_original_7z POIS ELE NAO FOI LOCALIZADO! \n VERIFICAR ARQUIVO DE LOG: $LOG" >> $LOG
   ERRO_DESCOMPACTACAO=1
   systemctl restart smb
fi

if [ -e $caminho_arquivo_intermediario_gbk ] && [ $ERRO_DESCOMPACTACAO -eq 0 ];
then
echo -e "++++++++++++++++++++++++++LOG do UN7z+++++++++++++++++++++++++++++++" >> $LOG
   chmod 777 $caminho_arquivo_intermediario_gbk
   gbak -user SYSDBA -pass SEGREDO $caminho_arquivo_intermediario_gbk $caminho_arquivo_final_fdb -rep -c -v -G -p 8192 -fix_fss_metadata win1252 #&> $LOG_gbak

# Na linha foi comentado o comando "&> $LOG_gbak", pois caso contrário o LOG ficaria imenso!

   if [ $? -eq 0 ]
   then
      rm -rf $caminho_arquivo_intermediario_gbk
      chmod 777 $caminho_arquivo_final_fdb
      echo -e "restauracao do banco de dados concluida, removendo arquivo $arquivo_original_7z de $caminho_arquivo_original_7z" >> $LOG
   else
      echo -e "Erro no processo de restauracao o gbac nao conseguiu terminar ou terminou com erros. repita o procedimento!"
      systemctl restart smb
   fi
echo -e "++++++++++++++++++++++++++FIM LOG do UN7z+++++++++++++++++++++++++++++++" >> $LOG
else
   if [ "$ERRO_DESCOMPACTACAO" -eq 1 ];
   then
      echo -e "HOUVE UM ERRO NO PROCESSO DE DESCOMPACTACAO, PORTANTO, NAO HA ARQUIVO $arquivo_original_7z A SE VERIFICAR em $pasta_arquivo_intermediario_gbk ! \n VERIFICAR ARQUIVO DE LOG: $LOG" >> $LOG
      systemctl restart smb
      ERRO_RESTAURACAO=1
   fi
fi


#=================== INICIANDO SERVIÇOS APÓS RESTAURAÇÃO O BACK-UP ===============================================================
   echo -e "Reiniciando FIREBIRD E COMPARTILHAMENTO." >> $LOG
   systemctl restart firebird-superserver
   echo -e "`date +%H:%M:%S` Firebird reiniciado..........................: systemctl firebird-superserver start" >> $LOG
   echo -e "Reiniciando SAMBA E COMPARTILHAMENTO." >> $LOG
   systemctl restart smb
   echo -e "`date +%H:%M:%S` Compartilhamento Reiniciado..................: systemctl smb start" >> $LOG
#=================== FIM INICIANDO SERVIÇOS APÓS O BACK-UP ===========================================================
echo -e "FIM `date +%H:%M:%S`" >> $LOG

ASSUNTO="restauracao de Backup do $caminho_arquivo_final_fdb - $DIA/$MES/$ANO, $DIA_SEMANA-feira, no servidor 123.123.123.70"
MENSAGEM="Assunto: $ASSUNTO \nEMAIL_FROM: $EMAIL_FROM \nEMAIL_TO $EMAIL_TO"
rm -rf /root/log_temp.txt
tr  X < $LOG | mail -s "$ASSUNTO" -cEMAIL1@DOMINIO.NOME_EMPRESA.br,EMAIL2@DOMINIO.NOME_EMPRESA.br EMAIL3@DOMINIO.NOME_EMPRESA.br


Scripts recomendados

Backup com mysqldump

Backup RSYNC

Backup XML Pfsense

weekly-backup - backup agendado

Fazendo backup durante a semana em pastas distintas, equivalentes ao dia da semana


  

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