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:
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:
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:
e adicionar:
0 19 * * * postgres /backup/backup.sh
Reinicie o cron e o backup será feito todos os dias as 19 horas.