você está aqui: Home → Colunistas → Bancos de Dados Livres
Colaboração: Genivaldo Rocha
Data de Publicação: 04 de Janeiro de 2009
Muitas vezes usuários, programadores são pegos de surpresa com corrompimento de bases de dados do Firebird (problemas elétricos, falhas de hardware, etc.). Após passar por alguns problemas em clientes, resolvi fazer um script para realizar um backup (manutenção) diário na base de dados do Firebird sob Linux. Estou compartilhando esta primeira versão. Espero que seja de ajuda para alguém.
# !/bin/sh # bkfb versao 1.0 # # Script de Backup para Banco de Dados FIREBIRD # Escrito por Genivaldo Rocha - gldarocha@yahoo.com.br # Sugestoes, criticas e elogios serao bem vindas pelo email. # # Este Script estah sob a GPL Licence (COPYLEFT); # Em: http://www.gnu.org/copyleft/copyleft.pt-br.html # ou: http://www.gnu.org/home.pt-br.html # ou: http://www.gnu.org/philosophy/philosophy.html # # # # *** CONSIDERACOES ** # # 1 - Verifique a disponibilidade de espaco em disco para o diretorio # onde serao criados os backups, pois este script - nesta versao "ainda" # nao apaga backups de dias anteriores. Este recurso fica para as proximas # versoes. # 2 - Na medida do possivel todo comando e saidas (resultados) serao # logados no arquivo $DIA-bkfb.log # 3 - Para as proximas versoes aceito sugestoes e ja estou trabalhando # nas seguintes melhorias: # 3a) Remocao das copias(backups) de "n" dias atras; # 3b) Envio do arquivo de LOG (compactado) por email para o administrador; # 3c) Envio de relatorio de erro por email para o administrador; # 3d) Possibilidade de quebrar o backup em varios arquivos *.fbk(*.gbk); # 3f) Opcao de gravar o backup em fita DAT "/dev/st0", DVD/CD ou poderah # mandar os arquivos par um diretorio da rede; # 3g) Enviar o backup por ftp para outro servidor remoto. # 3h) ...; # 3i) ...; # # # # # Coloca mensagem no console avisando sobre o inicio mostrando # data e hora... bom pra saber o tempo do backup. echo ' ' echo -n 'Processo de backup iniciado em: ' && date +%d/%m/%Y' - as '%H:%M echo 'Aguarde a mensagem de finalizacao... ' echo ' ' echo 'Nao interrompa este processo!' echo ' ' echo ' ' # # Definicao de variaveis # Alterar as variaveis conforme as configuracoes # do Firebird, da base de dados e da Distribuicao LINUX. # DIA=$(date +%Y%m%d) GB='/opt/firebird/bin/gbak' GF='/opt/firebird/bin/gfix' US='sysdba' PW='masterkey' PH='/dados/banco' DB='bd_provenco.fdb' BK='/bkp' LOG=$BK/$DIA'-bkfb.log' # # Inicio dos processos # echo '*****************************************************' >> $LOG echo '*** Script de backup para Bases de Dados FIREBIRD ***' >> $LOG echo '*** Versao 1.0 ***' >> $LOG echo '*** www.tecnoredes.com.br ***' >> $LOG echo '*** Genivaldo Rocha - rocha@tecnoredes.com.br ***' >> $LOG echo '*** gldarocha@yahoo.com.br ***' >> $LOG echo '*****************************************************' >> $LOG echo ' ' >> $LOG echo ' ' >> $LOG echo '*** Iniciando Backup ***' >> $LOG echo -n 'Data: ' >> $LOG && date +%d/%m/%Y-%H:%M:%S >> $LOG && echo ' ' >> $LOG # # Cria diretorio diario do backup da base de dados # echo 'Criando diretorio para o backup' >> $LOG mkdir $BK/$DIA echo 'Diretorio criado : ' >> $LOG ls -la -ad $BK/$DIA >> $LOG echo 'Diretorio criado com sucesso!' >> $LOG && echo ' ' >> $LOG # # Shutdown na Base de Dados # echo 'Efetuando shutdown na base de dados' >> $LOG $GF -z >> $LOG 2>&1 $GF -shut -force 0 -user $US -password $PW $PH/$DB >> $LOG 2>&1 echo 'A Base de dados agora está OFFLINE...' >> $LOG && echo ' ' >> $LOG # # Copia a base de dados # echo 'Copiando a base de dados ' >> $LOG && echo ' ' >> $LOG cp $PH/$DB $BK/$DIA/$DIA-base.fdb ls -la $BK/$DIA/$DIA-base.fdb >> $LOG && echo ' ' >> $LOG echo 'Base de dados copiada com sucesso!' >> $LOG echo 'Uma copia da base, por seguranca estah no diretorio'$BK/$DIA >> $LOG && echo ' ' >> $LOG # # Prepara a base de dados para o GBAK (backup) # #echo 'Preparando a base de dados para o GBAK' >> $LOG && echo ' ' >> $LOG echo 'Otimizando a base de dados...' >> $LOG $GF -sweep -user $US -password $PW $PH/$DB >> $LOG 2>&1 echo 'Consertando erros, se existirem...' >> $LOG $GF -mend -full -user $US -password $PW $PH/$DB >> $LOG 2>&1 echo 'Base de dados preparada para o backup' >> $LOG && echo ' ' >> $LOG # # Efetua o backup da base de dados # echo 'Iniciando backup da base de dados usando GBAK' >> $LOG echo -n 'Hora inicial: ' >> $LOG && date +%H:%M >> $LOG $GB -b -g -v -z -t -user $US -password $PW $PH/$DB $BK/$DIA/$DIA-backup.fbk >> $LOG 2>&1 echo 'Backup efetuado com sucesso!' >> $LOG echo -n 'Hora final: ' >> $LOG && date +%H:%M >> $LOG && echo ' ' >> $LOG # # Compacta a copia da base e o backup da base # echo 'Compactando a copia da base de dados...' >> $LOG && echo ' ' >> $LOG tar -czvf $BK/$DIA/$DIA-backup.tar.gz $BK/$DIA/$DIA-backup.fbk >> $LOG 2>&1 ls -la $BK/$DIA/$DIA-backup.tar.gz >> $LOG && echo ' ' >> $LOG echo 'A copia da base de dados foi compactada com sucesso!' >> $LOG && echo ' ' >> $LOG && echo ' ' >> $LOG echo 'Compactando o backup da base de dados...' >> $LOG tar -czvf $BK/$DIA/$DIA-base.tar.gz $BK/$DIA/$DIA-base.fdb >> $LOG 2>&1 ls -la $BK/$DIA/$DIA-base.tar.gz >> $LOG && echo ' ' >> $LOG echo 'O backup da base de dados foi compactado com sucesso!' >> $LOG && echo ' ' >> $LOG # # Restaura a base de dados # echo ' ' >> $LOG echo 'Iniciando restore da base de dados usando GBAK' >> $LOG echo -n 'Hora inicial: ' >> $LOG && date +%H:%M >> $LOG $GB -r -v -z -N -user $US -password $PW $BK/$DIA/$DIA-backup.fbk $PH/$DIA-base.fdb >> $LOG 2>&1 echo 'Restore efetuado com sucesso!' >> $LOG echo -n 'Hora final: ' >> $LOG && date +%H:%M >> $LOG && echo ' ' >> $LOG # # Renomeia os arquivos e atribui privilegios # echo 'Removendo arquivos velhos (OLD)' >> $LOG rm $PH/$DB-old echo 'Arquivos antigos (OLD) removidos com sucesso!' >> $LOG && echo ' ' >> $LOG echo 'Renomeando a base de dados atual para OLD' >> $LOG mv $PH/$DB $PH/$DB-old echo 'Base de dados renomeada para OLD com sucesso!' >> $LOG && echo ' ' >> $LOG echo 'Renomeando a base restaurada para o nome real da base' >> $LOG mv $PH/$DIA-base.fdb $PH/$DB echo 'Base de dados renomeada para '$DB' com sucesso!' >> $LOG && echo ' ' >> $LOG echo 'Mudando o usuario e grupo donos da base para FIREBIRD:FIREBIRD' >> $LOG chown firebird:firebird $PH/$DB echo 'Mudanca de proprietario e grupo FIREBIRD efetuada com sucesso!' >> $LOG && echo ' ' >> $LOG echo 'Aplicando permissao total 777 ao arquivo da base' >> $LOG chmod 777 $PH/$DB >> $LOG 2>&1 echo 'Permissao aplicada com sucesso!' >> $LOG && echo ' ' >> $LOG # # Volta a base de dados para o estado ONLINE # echo 'Voltando a base de dados para o estado ONLINE' >> $LOG $GF -online -user $US -password $PW $PH/$DB >> $LOG 2>&1 && echo ' ' >> $LOG echo 'Base ONLINE!' >> $LOG && echo ' ' >> $LOG echo -n 'Data: ' >> $LOG && date +%d/%m/%Y-%H:%M:%S >> $LOG echo '*** Fim do backup diario ***' >> $LOG && echo ' ' >> $LOG # # Coloca mensagem no console avisando sobre o final, mostrando # data e hora novamente. echo ' ' echo -n 'Processo de backup finalizado com sucesso em: ' && date +%d/%m/%Y' - as '%H:%M echo ' '
Genivaldo Rocha é Especialista em Redes Novell Netware, agora muito mais linux. Trabalho atualmente como consultor de segurança de TI e tem uma pequena empresa de consultoria em redes de computadores. A Tecnoredes nasceu da vontade de trabalhar por conta própria e fazer o que gosta... Usa a distro SuSE Linux Enterprise Server para bancos de dados e Slackware para firewall. Administra o NUI-Brasil, Novell Users International. Aqueles que quiserem fazer uma visita ao grupo fiquem a vontade para acessar: http://groups.yahoo.com/group/nui-brasil
Luiz Paulo de Oliveira Santos teve seu primeiro contato com computadores em 1984, estudou BASIC para equipamentos de 8 bits (ZX-81 e Apple 2), em 1985 com o ambiente de 16 bits, e em 1988 com o ambiente de 32 bits. Em 1993 foi um dos primeiros Brasileiros a ter contato com o VBK que em 1995 se tornou o Delphi. Graduou em Tecnologia Em Processamento de Dados, cursou especialização em Análise de Sistemas e atualmente é graduando em Ciências Jurídicas. Atua como analista de suporte de redes da Universidade Metodista de Piracicaba, é editor da revista DB Freemagazine (uma revista gratuíta focada exclusivamente para bancos de dados Cliente/Servidor) e professor nas Faculdades Integradas Einstein de Limeira no curso de Tecnologia em Sistemas de Informação. Tem experiência nas áreas: Sistemas de Computação, Redes e Teleprocessamento de Dados, Bancos de Dados cliente-servidor e SQL. É autor do livro Firebird - Dicas de Segurança, publicado pela Editora Ciência Moderna.