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
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.
#!/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
Teste de desempenho com números primos em BASH
Backup com data no nome do arquivo
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
Não to conseguindo resolver este problemas ao instalar o playonelinux (1)
Excluir banco de dados no xampp (1)
[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