Backup automático do postgres + rsync para outra máquina

outubro 15th, 2009 by caferrari Leave a reply »

Aqui vou exemplificar a solução que usamos para fazer backup diário dos nossos bancos de dados, este backup é armazenado em um servidor fora do país. para fazer a sincronia, usamos o rsync.

1) Configurando login automático via chaves digitais no nosso servidor de armazenamento

Primeiro você tem que gerar as chaves no seu servidor de banco, com o usuário do banco de dados, no meu caso é o usuário “postgres”.

Você será perguntado por uma senha, deixe em branco e confirme:

$ su postgres
$ ssh-keygen -t dsa

Agora você terá sua chave, copie-a para seu servidor que irá armazenar o backup

$ scp ~/.ssh/id_dsa.pub user@server_bkp:~/

Agora acesse seu servidor via ssh e adicione a chave pública na lista de chaves autorizadas do ssh

$ ssh user@server_bkp
$ cat ~/id_dsa.pub >> ~/.ssh/authorized_keys

Volte para o seu servidor de banco no usuario do postgres e teste:

$ ssh user@server_bkp

Se você conseguiu acessar o server de backup sem digitar senha, continue no passo 2, senão, de uma revisada. qualquer dúvida comente!.

2) Instalando o rsync e script de backup

Para instalar o rsync no debian é bem simples:

$ aptitude install rsync

No nosso banco de dados os backups são feitos diariamente as 19 horas, e usamos a pasta /backup para armazena-los:

$ mkdir /backup
$ touch /backup/backup.sh
$ chmod +x /backup/backup.sh
$ chown postgres:postgres /backup -R

Agora, edite o arquivo backup.sh e coloque o conteúdo:

#!/bin/bash
 
PASTA=$(date +%m%Y)
DATA=$(date +%Y%m%d)
DIA=$(date +%d)
 
mkdir /backup/$PASTA
mkdir /backup/$PASTA/$DIA
 
LIST=$(psql -l | awk '{ print $1}' | grep -vE '^-|^\(|^List|^N[o|a]me|template[0|1]')
for d in $LIST
do
        pg_dump -i -h 127.0.0.1 -p 5432 -U postgres -F t -b -f "/backup/$DATA-$d.backup" $d
        tar -zcf /backup/$PASTA/$DIA/$DATA-$d.tar.gz /backup/$DATA-$d.backup
        rm /backup/$DATA-$d.backup
        /usr/bin/rsync -avzh --delete --progress --update /backup/ user@server_bkp:~/
done

faça um teste e rode o script com o user do postgres:

$ su postgres
$ /backup/backup.sh

Se tudo ocorrer bem, é só adicionar no crontab para executar quando você quiser:

$ su
$ pico /etc/crontab

e adicionar:

0 19    * * *   postgres    /backup/backup.sh

Reinicie o cron e o backup será feito todos os dias as 19 horas.

Advertisement

13 comments

  1. Roger Wagner disse:

    Interessante a solução, tenho uma parecida.
    Mas isto tem o enfoque o backup de dump full, certo?
    E se fosse incremental, teria como ser? E o restore dai?

    Somente levantando problemas que enfrento.
    Mas do mesmo mantenho o elogio pelo post.

  2. Diego disse:

    O que é melhor?
    1. Fazer dump do banco e jogar para o server de backup.
    2. Utilizar replicação de banco.

  3. Carlos André Ferrari disse:

    @Diego

    Depende!..

    Se você tem replicação, você pode usar os dois bancos para aumentar a performance geral dos sistemas e ainda usar de backup… além de, em caso de pane, você já teria um banco pronto para assumir…

    O backup para outro lugar é uma solução bem mais “barata”, e você pode – e deve – ter, mesmo se estiver usando replicação. A desvantagem é, que se der algum problema, o tempo para restaurar tudo é menor.

    []‘s

  4. Diego disse:

    Atualmente tenho um plano de backup (full) externo na empresa de hospedagem que utilizo. Se der qualquer problema com o server basta repor o hardware e voltar o backup, é quase um Ghost.
    Mas estou pensando em mudar a infra-estrutura, visto que as requisições aos sites que hospedamos estão aumentando e tudo roda em apenas um servidor dedicado, vários serviços concorrendo por memória e processamento, não é legal.
    Estou gostando da sua abordagem com o nginX e agora essa dica simples de backup do banco.
    Parabéns pelo blog, já está nos favoritos.

  5. Only wanna input that you have a very decent website , I enjoy the layout it actually stands out.

  6. Zita disse:

    I see a lot of interesting articles on your website.

    You have to spend a lot of time writing, i know how to save you
    a lot of work, there is a tool that creates unique,
    SEO friendly posts in couple of seconds, just type
    in google – k2 unlimited content

  7. Marion disse:

    I read a lot of interesting posts here. Probably you
    spend a lot of time writing, i know how to save you a lot of work, there
    is an online tool that creates readable, google friendly articles in seconds, just search in google
    - laranitas free content source

  8. Computer disse:

    What’s up i am kavin, its my first time to commenting anyplace,
    when i read this piece of writing i thought i could also make comment due to this good
    piece of writing.

  9. senuke xcr disse:

    I was curious if you ever thought of changing the
    layout of your website? Its very well written; I love what youve got to say.
    But maybe you could a little more in the way of content
    so people could connect with it better. Youve got an awful lot of text for only having
    one or two pictures. Maybe you could space it out better?

  10. Click Webpage disse:

    Nós te ajudamos a recuperar, acesse http://ferrari.eti.br

  11. Segundo empresário, a festa segue modelo de outras semelhantes,
    já realizadas em São Paulo.

  12. anillo pene disse:

    Have you ever considered about adding a little bit more than just your articles?

    I mean, what you say is valuable and everything. Nevertheless think of if you added some great photos or video clips to
    give your posts more, “pop”! Your content is excellent but with images and videos, this website could
    undeniably be one of the most beneficial in its field.
    Awesome blog!

Deixe uma resposta