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.

NVLAN - Consultoria