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.615 ]
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
Fazendo backup durante a semana em pastas distintas, equivalentes ao dia da semana
Backup do PostgreSQL 8.3 e aviso por e-mail
Realiza backup de VMs ligadas no XenServer 6.5
Script de backup dos hosts do Zabbix
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Arch Linux - Guia para Iniciantes (2)
Problemas ao instalar o PHP (11)
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)