terça-feira, 16 de junho de 2015

Backup diário de banco Postgres usando crontab

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


Nenhum comentário:

Postar um comentário