O bpipe é um plugin genérico do Bacula Community que permite configurar um script de backup de praticamente qualquer aplicação enviando os dados diretamente para o Bacula através de um Named Pipe (FIFO), sem a necessidade de salvar nenhum dado na máquina do cliente.
Temos um curso no Udemy apenas sobre o bpipe, com vários exemplos, tais como backup de bancos de dados MySQL, PostgreSQL, Firebird, LDAP; Máquinas Virtuais do Xen, KVM, Proxmox; Caixas de Correio do Zimbra, dentro outros.
O bpipe também está presente no Bacula Enterprise, mas o mesmo já contém o plugins para mais de 20 aplicações específicas, com recursos mais automatizados e técnicas mais avançads na redução no tamanho destes backups.
Todos os procedimentos de backup e restauração do bpipe devem ser testados antes de serem implementados em ambientes de produção. Qualquer feedback é apreciado.
Configuração
Ativando o Backup Incremental do DB2
Para especificar se o backup incremental está ativado para um banco de dados, use o parâmetro de configuração TRACKMOD. Esse parâmetro especifica se o gerenciador do banco de dados rastreará as modificações do banco de dados para que o utilitário de backup possa detectar quais subconjuntos do banco de dados devem ser examinados por um backup incremental e possivelmente incluídos na imagem de backup.
O parâmetro de configuração TRACKMOD pode ter um dos dois valores a seguir:
- NÃO – O backup incremental não é permitido. As atualizações da página do banco de dados não são rastreadas ou registradas de qualquer forma. Este é o valor padrão.
- SIM – o backup incremental é permitido. Quando o rastreamento de atualização está ativado, a alteração se torna efetiva quando a primeira conexão bem-sucedida ao banco de dados é feita. Esteja ciente de que, antes que um backup incremental possa ser feito em um espaço de tabela específico, é necessário um backup completo desse espaço de tabela (mais detalhes sobre isso seguem o exemplo abaixo).
O exemplo a seguir mostra como você ativaria o backup incremental:
DB2 UPDATE DATABASE CONFIGURATION FOR DBNAME USING TRACKMOD YES
É possível usar algo como o script a seguir para ativar o TRACKMOD igual a YES para todos os bancos de dados DB2:
db2user=db2inst1 for dbname in $(su - $db2user -c "db2 list database directory" | grep Indirect -B 5 |grep "Database alias"| awk {'print $4'} |sort -u | uniq); do su - $db2user -c "db2 UPDATE DATABASE CONFIGURATION FOR $dbname USING TRACKMOD YES" done
Se ainda não estiver configurado, também é necessário ativar o modo de log de archive para cada banco de dados. Por exemplo.
su - db2inst1 -c "db2 update db configuration for DBNAME using logarchmeth1 disk:/var/db2"
Agora é possível executar diferencial (a IBM chama de incremental) e incremental (backup delta).
Configuração bpipe
O script de shell a seguir é usado para informar o Bacula sobre quais configurações de bpipe usarão para a tarefa de backup durante a execução.
Ele recebe o nível do Job de backup, obtém todos os bancos de dados existentes do DB2, cria pipes nomeados para cada base e imprime as configurações do FileSet do bpipe para o Bacula Job.
#!/bin/bash # # /opt/bacula/etc/db2_bacula.txt # # Script to generate Bacula FileSet bpipe syntax configuration in order to backup # all db2 databases from an instance # # Autorship: Heitor Faria (Copyleft: all rights reversed). # Advisor: Julio Neves Shell Script Teacher - julio.neves@gmail.com # Tested by: Heitor Faria # # It must be called at the FileSet INCLUDE Sub-resource, used by the job that # backups DB2 machine and contains a Bacula Client, like this (e.g.): # # Plugin = "\|/opt/bacula/etc/db2_bacula.txt %l" # # The following example shows how you would enable DB2 incremental backup and archive log, required by this script: # # su - db2inst1 -c "db2 UPDATE DATABASE CONFIGURATION FOR DBNAME USING TRACKMOD YES" # su - db2inst1 -c "db2 update db configuration for DBNAME using logarchmeth1 disk:/var/db2" # level=$1 db2user=db2inst1 pipedir=/mnt/pipe # test if pipedir exists or create it [[ -d "$pipedir" ]] || mkdir -p $pipedir # verify backup level and set db2 backup command options if [ $level == Differential ] then options="INCREMENTAL" fi if [ $level == Incremental ] then options="INCREMENTAL DELTA" fi # creates named pipes, calls db2 backup and configures Bacula bpipe for dbname in $(su - $db2user -c "db2 list database directory" | grep Indirect -B 5 |grep "Database alias"| awk {'print $4'} |sort -u) do [ -p $pipedir/$dbname ] || { mkfifo $pipedir/$dbname chown $db2user $pipedir/$dbname } su - $db2user -c "db2 -r /tmp/db2bkp.log +o BACKUP DATABASE $dbname ONLINE $options TO $pipedir/$dbname WITHOUT PROMPTING" & 2>&- echo "bpipe:$pipedir/$dbname.db2.$level:cat $pipedir/$dbname && rm -f $pipedir/$dbname:dd of=/tmp/$dbname.db2.$level" done
Depois de salvar um script em uma pasta (por exemplo: /opt/bacula/etc/db2_bacula.txt), crie um novo Bacula FileSet com a seguinte linha Include:
Plugin = "\|/opt/bacula/etc/db2_bacula.txt %l"
É importante testar todos os comandos de script no shell. Execute Jobs de testes de backup e restauração, e inicie o bacula-fd no modo de depuração se aparecer algum erro.
Se desejar restaurar o backup do banco diretamente para o db2, substitua o comando de restauração do bpipe pelo seguinte:
dd of=/tmp/$dbname.db2.$level && su - $db2user -c 'db2 restore db $dbname from /tmp/$dbname.db2.$level replace existing' && rm -f /tmp/$dbname.db2.$level
Referências
Using DB2 incremental backup – https://www.ibm.com/developerworks/data/library/techarticle/dm-0910db2incrementalbackup/index.html
Disponível em: PortuguêsEnglish (Inglês)Español (Espanhol)