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.598 ]
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
- 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.
#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
Limpeza dos dados do rConfig (ferramenta open-source de gerenciamento de configuração
Backup, compactação, verificação e transferência de arquivos
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (3)
É cada coisa que me aparece! - não é só 3% (3)
Melhorando a precisão de valores flutuantes em python[AJUDA] (5)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta