Backup PostgreSql por DataBases

Publicado por Wagner Cipriano 03/03/2009

[ Hits: 20.705 ]

Download PGBackup.sh




Realizando backup de databases PostgreSQL
---

- Arq de config das bases a fazer backup
Crie um arquivo com o nome "DBs.backup" que armazenará o nome dos bancos de dados a fazer cópias de segurança.

##Conteúdo do arquivo:
Intip helpdesk travele tollbox

O arquivo contém o nome de cada banco de dados separado por um espaço. Cada banco de dados citado no arquivo será ser incluído na lista de bancos de dados a realizar o backup periódico na nossa rotina.

  



Esconder código-fonte

#!/bin/bash
# Autor: Wagner Cipriano GnãOB <wagner@intip.com.br> #
# * DataBases PostgreSql #
# Para incluir novos bancos de dados no backup editar o arquivo #
# './DBs.backup' colocando espaco entre os nomes. #
# #
# Copie a vontade, mantenha o autoria original #
################################################

PATH=/usr/sbin:/usr/local/bin:/usr/bin:/bin
export PATH
inicio="`date +%Y-%m-%d_%H:%M:%S`"

#@ Variaveis
EMAIL="wagnao@gmail.com"
DIR=/backup/data
ERRORLOG="$DIR/error.log"
ERROR=0;
PGUser="postgres"
PGPort="5432"

#@ Pega a lista de databases a "bk_piar" no arq de configuracao
DATABASES=(`cat ./DBs.backup`)
if [ "$?" -ne 0 ]; then
echo "ERRO: arquivo de configuracao dos DataBases nao encontrado: 'DBs.backup'";
ERROR=1;
fi


#@ Para cada database da lista, executa o dump e compacta
DIR=/backup/data/pgsql
cd $DIR
for((i=0; i < ${#DATABASES[@]}; i++))
do
echo ">>> dump DB ${DATABASES[$i]}"
pg_dump -p $PGPort -U $PGUser -C -f ./db${DATABASES[$i]}.bkp ${DATABASES[$i]} 2> $ERRORLOG
if [ "$?" -ne 0 ]; then
echo "ERRO ao gerar dump DB $i: '${DATABASES[$i]}'";
ERROR=1;
fi
echo ">>> compactando dump do DB ${DATABASES[$i]}"
tar -cvzf db${DATABASES[$i]}-`date +"%y%m%d"`.tgz ./db${DATABASES[$i]}.bkp 2>> $ERRORLOG
if [ "$?" -ne 0 ]; then
echo "ERRO ao compactar DUMP do DB $i: '${DATABASES[$i]}'";
ERROR=1;
fi
done
cd $DIR
#@ Apaga os arquivos de backup e mantem apenas os arquivos compactador
rm ./*.bkp
#@ limpa os arquivos antigos, mantendo os ultimos 5 dias
find $DIR/ -name "*.tgz" -mtime +5 -type f -exec rm -f {} \;


#@ Envia email de confirmacao
echo ">>> envio de email de comfirmacao para $EMAIL"
if [ "$ERROR" -eq 1 ]; then
cat $ERRORLOG | mail $EMAIL -s "web-master Intip: Erro no backup `date`";
else
echo "Backup local web-master Intip gerado com sucesso em `date`" | mail $EMAIL -s "web-master Intip: backup ok em `date`"
fi

echo "Rotina inciou em: $inicio"
echo "Rotina terminou em: `date +%Y-%m-%d_%H:%M:%S`"

Scripts recomendados

Script de instalação do metasploit no Ubuntu

Clontexto

Telegram direto do site

Arquivo que instala o Lazarus 1.0

Menu de sessão


  

Comentários
[1] Comentário enviado por hra em 06/03/2009 - 11:58h

Bom script, parabéns.

Para complementar:
Se você quiser gerar a lista de todos os bancos de dados disponíveis pode usar essa sintaxe:

echo "select array_to_string(array(select datname from pg_database where datname not in ('template0', 'template1')), ' ')" | psql -A -t -Upostgres

Esse comando já vai gerar a lista (DBs.backup) no formado esperado pelo script.

[2] Comentário enviado por gnaovol em 20/01/2014 - 08:48h

hra, muito obrigado pela contribuição !

[3] Comentário enviado por fabiano12 em 08/01/2016 - 11:32h

Meus caros bom dia!!

Primeiramente parabéns pelo script! Estava a procura de algo neste sentido para realizar o backup da base PostGres que possuo. Mas surgiu uma dúvida: conforme informa pelo hra, o seguinte comando: echo "select array_to_string (array (select datname from pg_database where datname not in ('template0', 'template1')), ' ')" | psql -A -t -U postgres deveria gerar a lista de DB e disponiblizar de acordo com o Script mas ao executá-lo, exibe a seguinte mensagem: "BackupPostgres3.sh: 25: BackupPostgres3.sh: ./DBs.backup): not found". Poderiam me auxiliar neste questão?

Sds,
Fabiano Lima


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts