Automatizar backup do PostgreSQL

Publicado por Glaucio Klipel 24/01/2007

[ Hits: 30.167 ]

Download backup2.sh




Este script é uma modificação do script de backup do PostgreSQL postado por Jairo Tcatchenco.

Após testar o script postado obtive alguns erros e modifiquei o código para adaptar ao meu banco. O script lista todas as bases do Postgree e exclui a "template0" e "template1", salvando em arquivos individuais separados por nome dos bancos.

Ainda cria pastas com nome de data e cria os arquivos com nome de data e hora.

Espero ter ajudado e créditos a Jairo Jairo Tcatchenco!
http://www.vivaolinux.com.br/~jtcatchenco

  



Esconder código-fonte

#!/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`
tt=`/bin/date +%H%M%S`

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

# Cria o diretório do dia se ele não existir
if [ -d /opt/data/backup/$t ]; then
  cd /opt/data/backup/$t
else
`mkdir /opt/data/backup/$t`
fi

# Define permissoes de leitura e gravacao para o diretorio
`chown -R postgres /opt/data/backup/`
`chown -R postgres /opt/data/backup/$t`
`chmod 0777 /opt/data/backup/$t`

# 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 != postgres ]; then
        su postgres -c "/usr/bin/pg_dump -h localhost -U postgres -c -d -F -f $DST/$t/$i"_"$t"_"$tt.bkp -Z 1 $i";
    fi
done

Scripts recomendados

Firewall Dialog

Ajuda a usar o comando ln [SCRIPT]

Script para rotacionar logs dos sites no Apache

Acessar diretório Novell

Verifica tamanho da inbox + pastas e envia e-mail alertando o usuario


  

Comentários
[1] Comentário enviado por jtcatchenco em 25/01/2007 - 12:01h

Bom! Muito bom!
A única observação é que o postgresql 8.1.# já tem na sua configuração o autovacuum. No caso dele estar habilitado, não seria necessária a linha

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

Abraços.

[2] Comentário enviado por glaucioklipel em 25/01/2007 - 12:42h

Valeu velho, ainda tenho um longo caminho em linux e bancos de dados ehheheeh

Abraços!

[3] Comentário enviado por diekn em 22/05/2007 - 21:31h

Blz,cara,vou testar pra ver.

[4] Comentário enviado por henriquemeira em 20/03/2010 - 22:35h

Contribuição estúpida...

Na criação do diretório, incluir o parametro -p ao mkdir para criar as pastas recursivamente:

`mkdir -p /opt/data/backup/$t`

valeu!

[5] Comentário enviado por paulopewera em 20/09/2012 - 16:33h

boa tarde
sou iniciante no linux e estou tentando usar esse script no CentoOs 5.8 mas quando vou executar ele apresenta o seguinte erro

[root@localhost Backup]# sh backup.sh
'ackup.sh: line 29: syntax error near unexpected token `do
'ackup.sh: line 29: `for i in `psql -l -U postgres | cut -f 2 -d " " -s`; do

se tiver alguma dica agradeço

Valeu

[6] Comentário enviado por glaucioklipel em 20/09/2012 - 18:23h


'ackup.sh: line 29: `for i in `psql -l -U postgres | cut -f 2 -d " " -s`; do


É impressão minha ou há um ` antes do for? Confere no script que acho que é isso.


[7] Comentário enviado por fabio.telles em 11/12/2012 - 08:42h

Vale a pena lembrar que backup em banco de dados vai muito alem do Dump. Você precisa na verdade de uma estratégia de backup, e principalmente uma estratégia de RESTORE.

Vide artigo: "Dump não é backup": http://tellesr.com/dump-nao-e-backup/

[8] Comentário enviado por glaucioklipel em 11/12/2012 - 10:14h

Obrigado pela correção Fabio, claro que esse script não é capaz de abrir um guarda-chuva ou dar pernas ao servidor pra correr em caso de incêndio. Então podemos chamá-lo de dump e só.

Valeu.

[9] Comentário enviado por samuel_pc7 em 21/11/2014 - 18:37h

amigo a unica coisa que mudei no seu escript foi o endereço "localhost" para "IpDoMeuServidor"
porem esta dando essa mensagem..
psql: FATAL: autentica??o do tipo peer falhou para usu?rio "postgres"
sabe me dizer como posso resolver?

[10] Comentário enviado por samuel_pc7 em 21/11/2014 - 19:36h


[9] Comentário enviado por samuel_pc7 em 21/11/2014 - 18:37h:

amigo a unica coisa que mudei no seu escript foi o endereço "localhost" para "IpDoMeuServidor"
porem esta dando essa mensagem..
psql: FATAL: autentica??o do tipo peer falhou para usu?rio "postgres"
sabe me dizer como posso resolver?

Esse erro de cima consegui resolver agora esta aparecendo este..

bash: -c: line 0: erro de sintaxe próximo do `token' não esperado `)'
bash: -c: line 0: `/usr/bin/pg_dump -h 186.202.178.165 -U postgres c -d -F -f /opt/data/backup/211114/211114/registros)_211114_193559.bkp -Z 1 registros)'

[11] Comentário enviado por glaucioklipel em 21/11/2014 - 22:41h

/opt/data/backup/211114/211114/registros)_211114_193559.bkp -Z 1 registros)'

Tire todos os ) e troque os ' por crase, ou tire a crase e troque por inicial $( e feche com )


[12] Comentário enviado por rengaf1 em 16/03/2017 - 09:16h

ao executar o backup dava esse erro

bash: /usr/bin/vaccumdb: Arquivo ou diretório não encontrado
psql: FATAL: autenticação do tipo peer falhou para usuário "postgres"

alterei a linha su postgres -c "/usr/bin/vaccumdb -a -z -f -q"

ao invés de vaccumdb troquei por vacuumdb

e tudo funcionou filé!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts