Automatizar backup é tipo escovar os dentes automaticamente, só que pra seu banco de dados. Fazer backup regularmente salva o mundo (no caso, seus dados) de desastres. Ninguém quer receber uma mensagem às 3 da manhã dizendo que o servidor caiu e perceber que o último backup foi feito há duas semanas. Automatização resolve isso: chega de correr riscos por causa do fator humano.
Tem várias ferramentas pra automatizar, mas hoje vamos falar das duas mais populares:
cron— o agendador de tarefas clássico e universal do Linux.pg_cron— extensão do PostgreSQL que deixa você rodar tarefas direto pelo servidor do banco.
A extensão pg_cron por baixo dos panos chama o serviço cron. Esse serviço só existe no Linux!
Bora lá!
Instalando o pg_cron
pg_cron é uma extensão do PostgreSQL que deixa você agendar tarefas automáticas direto no banco. É bonito, prático e faz seu PostgreSQL virar quase um mini data center.
Passos pra instalar:
- Confere se você tá usando PostgreSQL 10+, porque o
pg_cronsó funciona nas versões mais novas. Instala a extensão usando o gerenciador de pacotes do seu sistema. No Ubuntu, por exemplo:
sudo apt install postgresql-<version>-cronTroca o
<version>pela versão do PostgreSQL que você tem aí.Ativa a extensão na config do PostgreSQL. Abre o arquivo
postgresql.confe adiciona:shared_preload_libraries = 'pg_cron'Por quê? O
pg_cronprecisa que a lib seja carregada na inicialização do PostgreSQL — é obrigatório.Reinicia o servidor PostgreSQL:
sudo systemctl restart postgresqlAtiva a extensão no seu banco:
CREATE EXTENSION pg_cron;
Nessa etapa o pg_cron já tá pronto pra uso!
Criando uma tarefa pra backup automático
A grande sacada do pg_cron é poder rodar comandos em horários definidos. Bora criar uma tarefa pra rodar o pg_dump automaticamente.
Exemplo:
SELECT cron.schedule(
'backup_noturno', -- nome da tarefa
'0 2 * * *', -- agendamento (toda noite às 2h)
$$pg_dump -U username -F c -f /backups/university_backup.dump university$$ -- comando
);
Destrinchando a mágica:
'backup_noturno'— nome customizado da tarefa, pra você achar fácil depois.'0 2 * * *'— agendamento no formato cron: todo dia às 2:00.- O comando entre
$$ $$: estamos rodando opg_dumppra fazer backup do bancouniversity.
Depois de criar a tarefa, ela vai rodar no horário marcado!
Vendo e removendo tarefas do pg_cron
Pra ver todas as tarefas existentes:
SELECT * FROM cron.job;
Se alguma tarefa não faz mais sentido, remove assim:
SELECT cron.unschedule(job_id);
Troca o job_id pelo ID da tarefa que você pegou na consulta acima.
Usando o cron pra automatizar
Se você curte o jeito clássico do Linux pra automatizar ou se o pg_cron não tá disponível por algum motivo, o poderoso cron resolve.
Configurando uma tarefa com o cron
Primeiro, confere se o cron tá instalado e rodando:
sudo systemctl enable cron
sudo systemctl start cron
Agora vamos adicionar uma tarefa pra fazer backup. Abre o editor pra configurar as tarefas do cron:
crontab -e
Adiciona essa linha:
0 2 * * * pg_dump -U username -F c -f /backups/university_backup.dump university
Essa linha mágica faz o seguinte:
- Às 2 da manhã todo dia (
0 2 * * *) faz backup do bancouniversity. - Todos os backups vão pro arquivo
/backups/university_backup.dump.
Depois de salvar o arquivo crontab, a tarefa agendada começa a rodar.
Logs de execução do cron
Às vezes é bom saber o que deu ruim. Garante que a saída dos comandos vai pra um arquivo de log pra analisar depois. Pra isso, adiciona o redirecionamento na linha do comando:
0 2 * * * pg_dump -U username -F c -f /backups/university_backup.dump university >> /var/log/backup.log 2>&1
Agora tudo que rolar durante a tarefa vai ficar salvo no arquivo /var/log/backup.log.
Comparando pg_cron e cron
Então, temos duas ferramentas poderosas. Como escolher?
pg_croné ótimo se você quer agendar e gerenciar tarefas direto pelo PostgreSQL. É prático, não precisa sair do banco e dá pra escalar as tarefas fácil.croné mais universal. Dá pra usar não só com PostgreSQL, mas pra automatizar qualquer coisa.
| Característica | pg_cron | cron |
|---|---|---|
| Facilidade de integração | Integrado ao PostgreSQL, mas precisa da extensão | Funciona pra qualquer processo |
| Instalação | Precisa instalar a extensão | Já vem na maioria dos Linux |
| Logs | Ficam no PostgreSQL (tabela cron.job_run_details) |
Vão pros logs do sistema (geralmente /var/log/syslog) |
| Flexibilidade | Roda só SQL dentro do PostgreSQL | Pode rodar qualquer comando, script ou binário |
Testando se as tarefas estão rodando
Pra conferir se o backup tá funcionando, você pode rodar o comando do cron na mão:
pg_dump -U username -F c -f /backups/university_backup.dump university
Também é bom checar se os arquivos de backup tão lá na pasta certa, o tamanho deles e a data da última criação. Por exemplo:
ls -lh /backups/
Confere os logs com frequência e garante que as tarefas tão rodando de boa.
Proteção simples contra erros comuns
Erro nº1: "Esqueci de configurar as permissões!"
Se o usuário que roda o cron não tem permissão pra executar o pg_dump, as tarefas não vão funcionar. Garante que o usuário tem acesso ao banco.
Erro nº2: "Arquivo foi pro lugar errado!"
Sempre coloca o caminho completo dos arquivos e comandos. O cron não conhece seu ambiente — caminho completo é obrigatório: pg_dump -> /usr/bin/pg_dump.
Erro nº3: "Cadê meus logs?"
Não esquece de redirecionar a saída do comando pra um arquivo de log. Sem isso, você não vai saber de nenhum problema.
Nesse ponto você já tá pronto pra automatizar os backups do seu banco. Agora, mesmo se o servidor resolver tirar férias, seus dados vão estar seguros!
GO TO FULL VERSION