Backup de bases de dados individuais do PostgreSQL

Publicado por Jairo Tcatchenco 13/05/2005

[ Hits: 10.953 ]

Download bkp_bancos.sc




Este script gera arquivos individuais "gzipados" referentes às bases de dados listadas com o comando "psql -l", exceto template0 e template1. Esses arquivos são então agrupados com o "tar", tendo a data no nome. Este script está preparado para ser incluído no cron do usuário root, daí o uso do "su postgres -c...".

  



Esconder código-fonte

#!/bin/sh
# Script para backup dos bancos de dados

# Executa vaccum no banco
su postgres -c "/usr/bin/vacuumdb -a -z -f -q"

# Formata data para adicionar ao nome dos arquivos
t=`/bin/date +%y%m%d`

# Define o destino dos arquivos
DST="/backup/"

# Loop para gerar arquivos dump
for i in `psql -l -U postgres | cut -f 2 -d " "`; do
        if [ $i != template1 -a $i != template0 -a $i != "---------------+----------+-----------" -a $i != "rows)" -a $i != postgres ]; then
                su postgres -c "/usr/bin/pg_dump -c -d -f $DST/$i$t.dump.gz -Z 9 $i";
        fi
done

# Agrupa todos arquivos do dia
tar -cf $DST/dump_$t.tar $DST/*.dump.gz

# Exclui os arquivos dump.gz
rm $DST/*.dump.gz

Scripts recomendados

Calculadora em shell script

Script simples para Atualizar hora Slackware

Remoção de arquivos pela data

Instalação de programas em Debian-like

Gerador de senhas aleatórias com pwgen


  

Comentários
[1] Comentário enviado por glaucioklipel em 21/12/2006 - 22:34h

Olá Jairo!

Tentei executar esse script, mas o shell interpreta os "----------+---------+----------" como opções do psql. Tentei executar o cut com as variáveis postadas e mais com a "-s". Com a "-s" o pg_dump cria um arquivo com todos as bases juntas, sem o -s, o retorno que eu tenho é: "line 15: Too many arguments..."

Alguma sugestão?

gklipel@gmail.com

Obrigado!!!

[2] Comentário enviado por glaucioklipel em 21/12/2006 - 22:49h

Opa!

Já corrigi o problema!

fiz algumas alterações no script, talvez isso possa ajudar mais pessoas, agregando ao seu script.

Segue script:
________________________________________________________________
#!/bin/sh

# Script para backup dos bancos de dados

# Executa vaccum no banco
su postgres -c "/usr/bin/vaccumdb -a -z -f -q"

# Formata data para adicionar ao nome dos arquivos
t=`/bin/date +%d%m%y%H%M%S`
tt=`/bin/date +%d%m%y`

# Define o destino dos arquivos
DST="/opt/data/backup/$tt"

`mkdir /opt/data/backup/$tt`
`chown -R postgres /opt/data/backup/`
`chown -R postgres /opt/data/backup/$tt`

# Loop para gerar arquivos dump
for i in `psql -l -U postgres | cut -f 2 -d " " -s`; do
if [ $i != template1 -a $i != template0 -a $i != "rows)" -a $i != postgr
es ]; then
su postgres -c "/usr/bin/pg_dump -c -d -f $DST/$i"_"$t.bkp -Z 9
$i";
fi
done
___________________________________________________________

Me rendeu alguns bons tempos hehehehe

Um abraço!

[3] Comentário enviado por vinper em 10/07/2008 - 15:53h

Olá pessoal, sou novato no assunto, e estou precisando automatizar o backup do meu banco postgre. No crontab, como ficaria o comando pra chamar esse script??
valew

[4] Comentário enviado por jtcatchenco em 11/07/2008 - 21:06h

Coloque o script dentro da pasta /etc/cron.daily, se quiser executá-lo diariamente, ou /etc/cron.weekly, se quiser executá-lo semanalmente.
Um abraço.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts