:::: MENU ::::

domingo, 8 de maio de 2011

Nappa: "VEGETA! What does the scouter say about his power level?"

Vegeta: "IT'S OVER NINE THOUSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAND!" *crushes scouter*

Nappa: WHAT, NINE THOUSAND!? THERE'S NO WAY THAT CAN BE RIGHT!


Hahaha, adoro esse meme!!!! Enfim, voltando ao tema...
Meus queridos, não sei se vocês sabem, mas o backup de um banco de dados é um assunto POLÊMICO! (mas não tão quanto MAMILOS!).
Meu atual esquema de backup é realizado por meio de vários scripts, um em cada servidor. Funciona da seguinte maneira:
  1. Cada servidor possui um script que o seu nome é o seu ip. Exemplo: /etc/192.168.0.50.sh
  2. O MAIN se conecta via SSH e starta o script remotamente;
  3. Após a execução do script, o MAIN realiza um scp e puxa o tar.bz2 gerado
  4. O MAIN remove o arquivo gerado do servidor remoto, para não acumular sujeira.

Se o seu banco de dados é um postgresql, você pode ter algumas infelizes surpresas. Exemplos:

IT'S FAILS

Dump logado como root:
# pg_dumpall > postgresql.sql
Não funciona. Root não tem autorização para se logar no BD.

Com um agendamento no Cron, gerar um dump:
sudo -P -u postgres pg_dumpall > postgresql.sql
Não rola. Você precisa de um TTY para realizar essa operação.

Via SSH, executar manualmente o script:
sudo -P -u postgres pg_dumpall > postgresql.sql
Também não rola. Você precisa de um TTY para realizar essa operação. Esse ao menos é contornável, basta colocar a opção '-t' no sudo.
Só para informação: Juntar o cron + ssh dá um problema que nem o '-t' do sudo resolve.

Então... Depois de tomar na cara e ver algumas soluções,consegui dar um jeito. Ficou assim meu script de backup full do postgresql:


IT'S WORKS!

vim /etc/192.168.0.10.sh
Copicola:
#!/bin/bash -e
# Backup full do postgresql (GPLv3)
# Raul Liborio, rauhmaru@opensuse.org
# Ver. 0.2: Limpeza de codigo
#
# -- Variaveis
## Caso deseje mudar o diretorio
## de destino do backup,
## altere o path da variavel BKPDIR

DATA=`date +%d-%m-%Y`

BKPDIR="/backup/srvarquivos"
SQL="${DATA}_PGDUMP.tar.bz2"
DUMP="${DATA}_pgdb.sql"
PGBKP="/var/lib/pgsql/backup/$DATA"

[ -d $BKPDIR ] || mkdir -p $BKPDIR
su - postgres -c "mkdir -p $PGBKP"
su - postgres -c "pg_dumpall > $PGBKP/$DUMP 2> $PGBKP/err.log"

cd $BKPDIR
# Se o diretorio $BKPDIR/$DATA existir, haverá um erro
[ -d $DATA ] && rm -rf $DATA
mv -v $PGBKP $BKPDIR
tar cvjf $DATA/$SQL $DATA/$DUMP
rm -f $DATA/$DUMP


Para que seja realizado todos os dias, adicione no cron:
crontab -e

Por exemplo, backup todos os dias às 23:30
30 23 * * * /etc/192.168.0.10.sh

Prontinho! <nunca faça isso>Você agora poderá ir dormir a vontade, sem se preocupar com o backup! </nunca faça isso> Ou, pra quem curte, dar uns saques nos memes que tem por ai... tipo o NINE THOUSSAAAAAAANDDDD!!!!!






http://dragonball.wikia.com/wiki/It%27s_Over_9000!

0 comentários:

Postar um comentário

Só não vale xingar a mãe ou puxar cabelo nos comentários =)

Posts populares