quinta-feira, 11 de setembro de 2008

Tornando o backup de seus bancos de dados Postgres automáticos com a ajuda do crontab

Não sou DBA, mas aqui vai uma dica para quem quiser configurar o cron para realizar o backup de suas bases de dados hospedadas no PostgreSQL:

A configuração listada abaixo foi testada em um servidor rodando:
  • Ubuntu Server 8.04
  • PostgreSQL 8.2
Primeiro: Crie um arquivo chamado pg_bkp.sh contendo o seguinte script shell:
#!/bin/sh
#
# ARQUIVO......: pg_bkp.sh
# AUTOR........: HELDER VIEIRA
# MODIFICADO EM: 2008-09-11
#
# Script para backup automatico de bancos de dados hospedados no PostgreSQL.
# Este script foi testado na versao 8.2 do Postgres rodando no Ubuntu 8.04, e
# para que seja executado automaticamente pelo sistema operacional basta acres-
# centar a seguinte linha ao final do crontab (supondo que este arquivo esteja
# em /scripts/):
#
# 00 18 * * * root /scripts/pg_bkp.sh
#

# PARAMETROS DE CONFIGURACAO

# Diretiva: host
#
# Descricao:
# Informa o IP ou nome da maquina onde encontra-se hospedado o servidor
# PostgreSQL.
#
# Default: localhost
host=localhost

# Diretiva: porta
#
# Descricao:
# Informa a porta onde o servidor PostgreSQL encontra-se rodando.
#
# Default: 5432
porta=5432

# Diretiva: usuario
#
# Descricao:
# Informa o nome do usuario do sistema que possui privilegios para acessar
# os programas de gerenciamento do PostgreSQL, bem como para todas as bases
# de dados que se deseja fazer o back-up.
#
# Default: postgres
usuario=postgres

# Diretiva: destino
#
# Descricao:
# Informa o caminho da pasta onde serao gravados os arquivos de back-up.
#
destino=/home/helder/Desktop/


data=`date +%Y%m%d`
for i in `sudo -u $usuario psql -l | cut -f 2 -d " " -s`; do
if [ $i != template1 -a $i != template0 -a $i != "rows)" -a $i != postgres ]; then
/usr/bin/pg_dump -i -h $host -p $porta -U $usuario -F c -b -f $destino$i$data.backup $i;
fi
done
Salve o arquivo e dê-lhe permissão para execução. Perceba que o script acima é todo parametrizado, bastando você informar o que é pedido, de forma semelhante a um arquivo de configuração. O script fará backup de todas as bases de dados que existir em seu servidor, com excessão dos databases template1, template0 e postgres.

Segundo: Edite o arquivo /etc/crontab do seu servidor para incluir a chamada ao script pg_bkp.sh.