Um simples script para backup de Bases PostgreSQL usando linux

O script abaixo faz com que seja gerado um backup usando pg_dump de todas as bases de dados ativas no PostgreSQL, com opção de reciclagem dos backups a cada 30 dias, ou seja, o script mantem os 30 arquivos mais novos e elimina os mais antigos.

O Script precisa ser rodado com o usuário postgres, que geralmente é o usuário padrão na instalação do PostgreSQL.

Alterne para o usuario postgres
# su – postgres

Crie um arquivo .sh que será o script a ser executado
$vi backup_script.sh

Com o conteúdo baixo:

#!/bin/bash
# Location to place backups.
backup_dir="/home/postgres-backup/"
#String to append to the name of the backup files
backup_date=`date +%d-%m-%Y`
#Numbers of days you want to keep copie of your databases
number_of_days=30
databases=`/usr/local/pgsql/bin/psql -l -t | cut -d'|' -f1 | sed -e 's/ //g' -e '/^$/d'`
for i in $databases; do
  if [ "$i" != "template0" ] && [ "$i" != "template1" ]; then
    echo Dumping $i to $backup_dir$i\_$backup_date
    /urs/local/pgsql/bin/pg_dump -Fc $i > $backup_dir$i\_$backup_date
  fi
done
find $backup_dir -type f -prune -mtime +$number_of_days -exec rm -f {}

Lembre-se que o caminho para o psql e pg_dump pode mudar de acordo a distribuição e versão do PostgresSQL.

Dê a permissão de execução ao script
$chmod 700 backup_script.sh

Agora é só adicionar ao Cron para que ele possa ser agenda a execução do script.

Abrir o Cron do linux
$crontab -e

Adicionar a linha de execução do script
3 0 * * * /caminho/backup_script.sh

Um artigo bastante interessante sobre como usar o Cron do linux pode ser acessando em https://help.ubuntu.com/community/CronHowto#Crontab%20Example