quinta-feira, 21 de agosto de 2014

Backup de vários bancos PostgreSQL no Linux

Não tem coisa mais chata do que ficar fazendo backup. Mas o Linux nos dá um poder muito grande com seus scripts e agendamento de tarefas através do cron. No meu ambiente de trabalho, tenho um servidor de banco de dados que tem vários bancos. Se eu usar o pd_dumpall vou estar fazendo o backup de todos os bancos, mas não terei como restaurar apenas um banco caso eu precise. Para isso, criei um script que faz o backup individual dos bancos.
Para compactar, estou utilizando o bzip2. Apesar de levar mais tempo para compactar, o banco de dados compactado com gzip que fica com 1,7GB, passou para 1,2GB com bzip2. Se o backup puder rodar na madrugada como é o meu caso, então não terá problemas de perda de desempenho do servidor, pois ele consome mais processamento do que disco.
Vou colocar todo o código e vou explicando linha a linha para facilitar o entendimento. Coloque as linhas abaixo em um arquivo e torne-o executável (chmod 700 seuarquivo.sh).
### Data do backup
data=`date +%Y_%m_%d`

### Apaga os mais antigos, vamos apagar o que tiver mais de 15 dias,
### mantendo o espaço do disco
TIME="+15"
find $dire -type f -mtime $TIME | xargs rm -rf

### Lista de banco de dados para backup individual. Deve ser separado por espaço
BANCO="financeiro contabil vendas"

### Loop para fazer o backup individual
for banco in `echo $BANCO`
do

    ### Caminho completo e Nome do arquivo de backup
   arq="$dire$banco$data.sql"

    ### Fazendo o backup do banco
   /usr/local/pgsql/bin/pg_dump "$banco" > $arq

   ### Compacta o arquivo com tar e bzip2 para obter compactacao maxima
   tar -cf $arq.tar $arq
   bzip2 $arq.tar

   ### A compactacao nao apaga o original, vamos apagar manualmente
   rm -f $arq

done

### finaliza
exit 0
Feito isso, basta agendar no cron e ser feliz. Apenas acompanhe para ter certeza que seu disco não irá encher, nesse caso, diminua a quantidade de dias de backup que você irá guardar alterando a variável TIME.

Nenhum comentário:

Postar um comentário