Consideraremos aqui um ambiente montado conforme nosso outro POST sobre a Instalação do PostgreSQL no CentOS 9. Para configurar a rotina de backup, iremos:
- Mapear uma pasta de rede (não explicaremos essa parte);
- Usaremos um compartilhamento CIFS, portanto precisaremos de um usuário e senha com acesso de escrita ao compartilhamento;
- Criar um script bash para:
- Mapear a pasta de rede;
- Apagar os backups com mais de 3 dias, dessa pasta (considerando que já copiou para uma fita);
- Fazer backup dos usuários e roles;
- Listar todas as bases de dados e, para cada uma, fazer o backup;
- Criar uma tarefa agendada para executar este script;
Criar o script bash
Antes de iniciar esse processo, verifique manualmente cada etapa do script que damos de exemplo e veja se consegue executar todas as tarefas. Se precisar de ajuda para configurar o CentOS a conseguir mapear um compartilhamento de rede, leia nosso post sobre como Montar compartilhamentos CIFS no CentOS. Tendo todos os requisitos, execute em seu CentOS os seguintes comandos:
touch /bin/backup_psql.sh
chmod 755 /bin/backup_psql.sh
vim /bin/backup_psql.sh
Pressione a tecla INSERT, para entrar em modo de edição e coloque o seguinte conteúdo (altere as partes em cinza, conforme sua realidade):
#!/bin/bash
# VARIAVEIS
BACKUP_DIR="/PATH_DO_LINUX_ONDE_IRA_MONTAR_A_PASTA_COMPARTILHADA"
SHARE="//IP_DO_SERVIDOR/NOME_DO_COMPARTILHAMENTO"
DATE=$(date +%Y-%m-%d)
#PGPASSWORD=SENHA_DO_POSTGRES
SHARE_USER=USUARIO_COM_ACESSO_AO_COMPARTILHAMENTO
SHARE_PASSWORD=SENHA_DESSA_CONTA
check=$(df -h | grep "$BACKUP_DIR" | grep "$SHARE")
#CHECA SE JA ESTAVA MONTADO
if [ -z "$check" ]; then
mount -t cifs -o username=$SHARE_USER,password=$SHARE_PASSWORD "$SHARE" "$BACKUP_DIR"
fi
#CHECA SE MONTOU
check=$(df -h | grep "$BACKUP_DIR" | grep "$SHARE")
if [ -n "$check" ]; then
#Limpa arquivos de backup com mais de 3 dias
find $BACKUP_DIR -name "*.sql" -type f -mtime +3 -delete
#Backup das roles
pg_dumpall -h 127.0.0.1 -r -U postgres -f "$BACKUP_DIR/roles_$DATE.sql"
#Backup dos usuários
pg_dumpall -h 127.0.0.1 -g -U postgres -f "$BACKUP_DIR/users_$DATE.sql"
#LISTA OS BANCOS
for bkp_database in $(echo "SELECT datname FROM pg_database;" | psql -h 127.0.0.1 -U postgres | tail -n +3 | head -n -2 | egrep -v 'template0|template1|postgres'); do
#PARA CADA RESPOSTA, EXECUTA O BACKUP
pg_dump -h 127.0.0.1 -F c -b -v -f $BACKUP_DIR/$bkp_database\_$DATE.sql -U postgres "$bkp_database"
done
umount "$BACKUP_DIR" -f
fi
Ao final, pressione a tecla ESC para sair do modo de edição e digite :wq! para salvar e sair.
Criar uma tarefa agendada para executar o script
Criaremos uma tarefa para ser executada às 22:00, altere conforme sua necessidade. Para criar a tarefa agendada, execute os seguintes comandos:
vim /etc/cron.d/backup_psql
Pressione a tecla INSERT, para entrar em modo de edição e deixe o arquivo com o seguinte conteúdo:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
00 22 * * * root /bin/backup_psql.sh >> /var/log/backup_psql.log 2>&1
Ao final, pressione a tecla ESC para sair do modo de edição e digite :wq! para salvar e sair, em seguida execute:
vim /etc/logrotate.d/backup_psql
Pressione a tecla INSERT, para entrar em modo de edição e deixe o arquivo com o seguinte conteúdo:
/var/log/backup_psql.log {
missingok
compress
notifempty
rotate 5
copytruncate
}
Ao final, pressione a tecla ESC para sair do modo de edição e digite :wq! para salvar e sair, em seguida execute:
systemctl restart crond
systemctl restart logrotate
Fontes/Referências
NVLAN – Instalação do PostgreSQL no CentOS 9
NVLAN – Montar compartilhamentos CIFS no CentOS
Mais Informações
Esperamos ter te ajudado e estaremos sempre a disposição para mais informações.
Se você tem interesse em algum assunto específico, tem alguma dúvida, precisa de ajuda, ou quer sugerir um post, entre em contato conosco pelo e-mail equipe@nvlan.com.br.