bkp do banco auto automatico do postgres + copia para maquina windows [RESOLVIDO

Iniciado por Leandr0, 18 de Fevereiro de 2010, 23:22

tópico anterior - próximo tópico

Leandr0

Srs. Boa noite

Rodo o seguinte script no meu linux para fazer copia do banco de dados automatico atraves da cron:

Script para DUMP de bases PostGreSQL.
# Referêia: http://www.htmlstaff.org/postgresqlmanual/app-pgdump.html
# Emiliano ESB<emilianoeloi@gmail.com>
# C 2005 04 20
# R 2007 04 11[adaptado para o VOL]
#
# VARIAVEIS ##################
vU="postgres"             # Usuario no PostGreSQL
vP="semsenha"               # Senha
vB=$1                     # Base De dados
vBI="/usr/local/pgsql/bin/pg_dump" # Diretorio raiz dos binarios do PostGreSQL
vR="/"                    # Diretorio raiz
vD="abs/base/"               # Destino do Backup
vPre="basePGSQL"          # Prefixo no nome do arquivo de saida
vE=".backup"                 # extencao do arquivo de saida
vH="127.0.0.1"            # Host do servidor
vPt="5432"                # Porta do servidor
vC="5"                    # Taxa de compressao do arquivo de 0-9
vAno=`date +%Y` #Ano
vMes=`date +%m` #Mes
vDia=`date +%d` #Dia
vHor=`date +%H` #Hora
vMin=`date +%M` #Min
vCod=`date +%N` #Cóo date [date (GNU coreutils) 5.3.0]
vDat="$vDia$vMes$vAno-$vHor$vMin-$vCod"
vA=$vPre"-"$vB"-"$vDat$vE
# VALIDAÃ ##################
if [ -z $vU ]; then
       echo "Sem usuáo";
       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 apos o nome do script";
       exit 0;
fi
# BACKUP #####################
echo "# Gerando backup. Aguarde..."
echo "# Destino: $vR$vD"
echo "# Nome do arquivo: $vA"
$vBI -v -U $vU -h $vH -p $vPt -Z $vC --format=c -b --file=$vR$vD$vA $vB


Até  aqui tdo bem porem preciso copiar esse bkp de forma automatica sempre o ultimo bkp feito de acordo com o horario configurado na  cron para uma maquina que esta na rede e usa o windows xp. Obs a pasta em que salvo o bkp  esta compartilhada pelo samba. Desde ja agradeco a ajuda de todos.

raidicar

Se entendi bem eu faria o seguinte:
1 - No micro com o xp criaria uma pasta e compartilharia com o nome de bkpbanco. Criaria dentro do diretorio /media, no linux, uma pasta com o mesmo nome.
2 - No Linux, instalaria o samba e o smbfs (via apt-get). Acredito que ja tenha ambos.
3 - Montaria a pasta do xp no linux com o comando:
smbmount //IP.do.Windows_XP/bkpbanco /media/bkpbanco/ -o username=Usuario,password=Senha
Obviamente em usuário colocaria o login do usuario que tem acesso ao XP e em senha colocaria a senha desse usuário.
Para jogar automaticamente o backup no micro com o XP não vai precisar compartilhar nada pelo samba e sim compartilhar uma pasta no Windows XP e monta-lá no linux/Unix.
Pode deixar essa pasta sempre montada colocando esse comando para iniciar com o sistema ou pode apenas montar na hora da transferencia do backup para o windows xp e desmontar em seguida, Se for esse o caso, coloque o smbmount dentro do script abaixo.
Para desmontar basta um smbumount /media/bkpbanco/.
Feito isso, agora que temos montado no Linux a pasta compartilhada no XP para onde sera enviada o backup, é preciso bolar um jeito de copiar o ultimo backup feito para essa maquina.
Supondo (segundo seu script) que o backup do seu banco é salvo em uma pasta chamada /abs/base/:
Se eu tivesse de executar essa tarefa independente do backup do banco Eu faria um script da seguinte forma:
#!/bin/bash
# Para esse script funcionar é preciso criar o caminho /media/bkpbanco no linux.
# No micro windows, criar o diretório bkpbanco e compartilha-lo com o mesmo nome.
#
# Inicio
# Montando compartilhamento no linux. Usuário e senha = Usuario e senha do Pc com WinXP.
smbmount //IP.do.Windows_XP/bkpbanco /media/bkpbanco/ -o username=Usuario,password=Senha
# Acessando pasta com o Backup do bando e realizando a copia do ultimo arquivo alterado
# nessa pasta para o compartilhamento do windows XP montado no linux.
cd /abs/base
var1=`ls -lgot --time-style=long-iso | cut -d: -f2 | cut -c 4-40 | sed -n 2p`
cp $var1 /media/bkpbanco/
# Desmontando compartilhamento criada para a cópia.
smbumount /media/bkpbanco/
# Fim


Resumindo:
O resultado do ls é armazenado dentro da variavel $var1 e em seguida é feita a cópia para a pasta /media/bkpbanco que nada mais é que uma pasta compartilhada do windows montada no linux.
O conteudo de $var1 é justamente o ultimo arquivo alterado dentro da pasta  /abs/base/, que é a pasta onde "supostamente" é feito o backup do banco.
Assim sendo, o ultimo arquivo alterado nessa pasta, que certamente é o ultimo backup realizado por você, será transferido ao windows XP na rede.

Eu acrescentaria mais umas coisas nesse script afim de manter pelo menos os últimos 7 backups realizados no micro do Windows XP. Ou seja, a cada backup os arquivos com mais de 7 dias seriam excluídos. Mas isso vai de acordo com sua necessidade. Na verdade, eu não vejo por que não utilizar o script para backup do banco para realizar essa tarefa. Como pelo seu script ja temos o nome do arquivo a ser gerado bastaria copia-lo, mas de qualquer forma, esse script realiza essa tarefa de forma independente, podendo ser rodado manualmente quando quiser ou em horários pré-determinados como o Dump da sua base de dados.
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

Leandr0

Rainier
Boa Tarde!
Gostaria de agradecer sua ajuda o bkp ta funcionando 100%

#!/bin/sh

# Script que gera backup de bases de dados PostGreSQL

# Absoluti By LEandro <leandro.batista@absolutitecnologia.com.br>

# 21022010

# VARIAVEIS ##################

vU="postgres"             # Usuario no PostGreSQL

vP="semsenha"               # Senha

vB=$1                     # Base De dados

vBI="/usr/bin/pg_dump" # Diretorio raiz dos binarios do PostGreSQL

vR="/"                    # Diretorio raiz

vD="home/public/"               # Destino do Backup

#vPre="basePGSQL"          # Prefixo no nome do arquivo de saida

vE=".backup"                 # extencao do arquivo de saida

vH="127.0.0.1"            # Host do servidor

vPt="5432"                # Porta do servidor

vC="5"                    # Taxa de compressao do arquivo de 0-9

vAno=`date +%Y` #Ano

vMes=`date +%m` #Mes

vDia=`date +%d` #Dia

vHor=`date +%H` #Hora

vMin=`date +%M` #Min

#vCod=`date +%N` #Cóo date [date (GNU coreutils) 5.3.0]

vDat="$vDia$vMes$vAno-$vHor$vMin"

vA=$vB"-"$vDat$vE

# VALIDAÃO ##################

if [ -z $vU ]; then

echo "Sem usuáo";

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 apos o nome do script";

exit 0;

fi

# REMOVENDO ARQUIVOS ANTERIORES

rm -rf /home/public/*


BACKUP #####################

#echo "# Gerando backup. Aguarde..."

echo "# Destino: $vR$vD"

echo "# Nome do arquivo: $vA"

$vBI -U $vU -h $vH -p $vPt -Z $vC --format=c --file=$vR$vD$vA $vB



### Copia automatica para maquina Windows ######



smbmount //172.18.20.22/bkpbanco /media/bkpbanco/ -o username=teste,password=123456



cd /home/public/



var1=`ls -lgot --time-style=long-iso | cut -d: -f2 | cut -c 4-80 | sed -n 2p`



7za a -t7z $var1.7z $var1



cp $var1.7z /media/bkpbanco/



smbumount /media/bkpbanco/





# REMOVENDO ARQUIVOS compactados



rm -rf /home/public/*.7z



# REMOVENDO ARQUIVOS



#rm -rf /media/bkpbanco/*