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.597 ]

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

Script para gravação de BKPs em DVDs-RW

Backup, compactação, verificação e transferência de arquivos

Backup incremental com rsync

weekly-backup - backup agendado

Backup usando o tar com o gzip


  

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