Howto: Gerando Dump do Postgresql e transferindo o arquivo para uma máquina com Windows Server

 

Howto: Gerando Dump do Postgresql e transferindo o arquivo para uma máquina com Windows Server

O objetivo deste howto não é discutir qual é a melhor forma de realizar um backup PostgreSQL, mas sim propor uma forma de realizar um Dump da base de dados em um servidor Linux e transferir para um servidor de arquivos que rode Windows, isso é muito comum em empresas e instituições, onde muitas vezes no servidor Windows encontra-se instalada algumas ferramentas de terceiro para gerenciar fitas, robôs e etc.

Não custa citar o ótimo artigo do Fábio Telles Rodriguez, onde o mesmo deixa claro que Dump não é considerado a melhor forma de realizar um backup. Vamos lá.

Imaginemos o seguinte cenário:

  • Uma rede controlada por um Windows Active Directory – AD (Windows 2003 ou maior);
  • Um servidor de arquivos na rede, que pode estar rodando na mesma máquina do AD ou em outra;
  • Servidor Linux (Ubuntu ou outro qualquer) e rodando o SGBD PostgreSQL 8.x;

A idéia é o seguinte:

  • Uma vez por dia o SGBD PostgreSQL irá gerar um Dump da base de dados, através de uma tarefa agendada na Crontab.
  • O dump gerado será armazenado em um diretório na mesma máquina do SGBD (não é uma boa prática deixar na mesma máquina) e uma cópia do mesmo será enviado para o servidor de arquivos Windows.

Mãos a massa:

  1. Vamos considerar que o servidor Linux seja Ubuntu (ou debian) . Se estiver utilizando CentOS  é só instalar os mesmos pacotes pelo Yum Instal;

Instalando os requisitos:

# apt-get install samba samba-common smbfs smbclient

Criando a pasta que servirá de montagem:

# mkdir /mnt/ntserver

No servidor de domínio, Windows Server – Active Directory, você deve ter um usuário com privilégio de escrita na pasta compartilhada. Basta executar a linha abaixo para testar a montagem:

# mount -t smbfs //192.168.0.10/pasta_compartilhada /mnt/ntserver -o username=usuario_de_dominio,password=senha_de_dominio

Claro trocando os termos em negrito para os da sua rede.

# ls /mnt/ntserver

Com este comando deve listar o conteudo da pasta campartilhada lá do servidor de arquivos Windows. Ok, agora, vamos desmontar:

# umount /mnt/ntserver

Criando o script de backup do PostgreSQL

Criando a pasta onde ficará armazenado localmente os Dumps

# mkdir /home/bkp_pg

Crie o arquivo chamado bkp.sh

# vim /etc/init.d/bkp.sh

Insira o seguinte conteúdo:

[shell]#!/bin/sh
# script que gera backup de bases de dados PostGreSQL
# Referencia: http://www.htmlstaff.org/postgresqlmanual/app-pgdump.html
# Jonas Ferreira – jonas.ferreira@gmail.com – http://jf.eti.br
# C 2010 03 19
#

# VARIAVEIS ##################
export PGPASSWORD=postgres            # Exportando a senha do PostGreSQL para o ambiente (Ubuntu)
vU=”postgres”                          # Usuario no PostGreSQL
vP=”postgres”                        # Senha
vB=nome_base                             # Base De dados
vBI=”/usr/lib/postgresql/8.3/bin/”     # Diretorio raiz dos binarios do PostGreSQL
vR=”/home/”                                # Diretorio raiz
vD=”bkp_pg/”                     # Destino do Backup
vPre=”basePG”                       # Prefixo no nome do arquivo de saida
vE=”.dmp”                              # extencao do arquivo de saida
vH=”localhost”                      # Host do servidor
vAno=`date +%Y`                     #Ano
vMes=`date +%m`                     #Mes
vDia=`date +%d`                     #Dia
vHor=`date +%H`                     #Hora
vMin=`date +%M`                     #Min
vCod=`date +%N`                     #date [date (GNU coreutils) 5.3.0]
vDat=”$vAno$vMes$vDia-$vHor$vMin-$vCod”
vA=$vPre”-“$vB”-“$vDat$vE

# VALIDACAO ##################
if [ -z $vU ]; then
echo “Sem usuario”;
exit 0;
fi
if [ -z $vP ]; then
echo “sem senha”;
exit 0;
fi
if [ -z $vB ]; then
echo “informe o nome da base de dados”;
exit 0;
fi

# BACKUP #####################
echo “# Gerando backup. Aguarde…”
echo “# Destino: $vR$vD”
echo “# Nome do arquivo: $vA”

echo “#################################”

echo “# Compactando backup. Aguarde…”

# Caso queira gerar com inserts (arquivo fica maior)
#$vBI””pg_dump -U $vU -h $vH –inserts $vB | gzip -c > $vR$vD$vA.out.gz

# Caso queira gerar com copy (arquivo fica menor)
$vBI””pg_dump -U $vU -h $vH  $vB | gzip -c > $vR$vD$vA.out.gz

echo “#################################”
echo “# Transferindo o o arquivo para o servidor Windows…”

# Montando a pasta
mount -t smbfs //192.168.0.10/pasta_compartilhada /mnt/ntserver -o username=usuario_de_dominio,password=senha_de_dominio

# copiando o arquivo
cp $vR$vD$vA.out.gz /mnt/ntserver

# desmontando a pasta
umount /mnt/ntserver

# limpando a variavel de ambiente
export PGPASSWORD=
exit
[/shell]

 

Setando permissão de execução no script:

# chmod +x /etc/init.d/bkp.sh

Colocando o script na Crontab:

# crontab -e

Adicione a seguinte linha:

#Realizando Backup do PostgreSQL – Todos os dias a meia noite
00 00 * * * /etc/init.d/bkp.sh

Salve o arquivo e pronto, já pode testar:

# /etc/init.d/bkp.sh

Como saída, você verá algo como:

# Gerando backup. Aguarde…
# Destino: /home/bkp_pg/
# Nome do arquivo: basePG-nome_base-20111116-2012-048760000.dmp
#################################
# Compactando backup. Aguarde…
#################################
# Transferindo o o arquivo para o servidor Windows…

Verifique na pasta de destino se foi criado o arquivo:

# ls /home/bkp_pg

Deve listar o arquivo compactado:

basePG-nome_base-20111116-2012-048760000.dmp.out.gz

Verifique também lá no servidor de arquivo do Windows, na pasta compartilhada, se este mesmo arquivo existi por lá.

Pronto, você acabou de implementar uma solução de Dump de uma base PostgreSQL e transferiu para um servidor de arquivos Windows. Espero que seja útil para você.

 

This entry was posted in Banco de Dados, HowTo - Como fazer, Windows. Bookmark the permalink.

One Response to Howto: Gerando Dump do Postgresql e transferindo o arquivo para uma máquina com Windows Server

  1. Tony Marle says:

    Jonas,

    Parabéns pelo site, vou sempre dá uma olhada aqui para aprender um pouco.

    Grande abraço!!!

Leave a Reply

Your email address will not be published. Required fields are marked *