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.
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.
O que é melhor?
1. Fazer dump do banco e jogar para o server de backup.
2. Utilizar replicação de banco.
@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
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.