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.