Recentemente
precisei criar uma rotina no linux (ubuntu 14.04 LTS), usando o
crontab, para fazer backup diário da base de dados de um sistema que
desenvolvi em PHP utilizando banco de dados Postgresql 9.3.
Para
fazer o backup decidi agendar 3 rotinas a serem executadas todo dia
ao meio dia:
1 –
Renomear o arquivo de backup existente;
2 –
Criar um arquivo txt de backup;
3 –
Apagar o arquivo de backup renomeado;
Então
resolvi criar um arquivo .sh (bkp_postgres.sh) do linux que execute
esses 3 comandos, o arquivo ficou como o exemplo abaixo:
#!/bin/bash
mv /var/www/html/sistema/bkp/backup.txt /var/www/html/sistema/bkp/backupold.txt
pg_dump nosso_banco_de_dados -i > /var/www/html/sistema/bkp/backup.txt
rm -rf /var/www/html/sistema/bkp/backupold.txt
Partindo
do pressuposto que o banco está na mesma máquina que o sistema e,
como por padrão, criamos o usuário postgres para gerenciar o banco
deveremos acessar o crontab com o usuário postgres com os comandos
abaixo:
$
sudo su postgres
$
crontab -e
Adicionei
na ultima linha do crontab o comando abaixo que representa o
agendamento:
0 12
* * * sh /var/www/html/sistema/bkp/bkp_postgres.sh
Por
fim, para testar o arquivo .txt de backup gerado, no terminal, logado
com o usuário postgres utilizar os comandos abaixo, para,
respectivamente, entrar no gerenciador do Postgresql, apagar o banco
do sistema, criar um novo banco do sistema com o mesmo nome, conectar
ao banco, restaurar as tabelas e valores das mesmas e por fim sair do
gerenciador.
$
psql
DROP
DATABASE nosso_banco_de_dados;
CREATE
DATABASE nosso_banco_de_dados;
\c
nosso_banco_de_dados; ** se conecta a base de dados criada
\i
/tmp/backupatividade.txt ; ** restaura as tabelas e valores com base
no arquivo
\q
** sai do psql