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.311 ]
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
Configuraçao da rede wireless no slackware
Instala JRE no Firefox com Fedora
Alteração de Senha do Mysql (sem saber a senha anterior).
Manutencao de arquivos no Squid-Cache
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
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (16)
Arch Linux - Guia para Iniciantes (2)
Problemas ao instalar o PHP (11)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)