Um Makefile foi projetado para gerenciar backups e restaurações de um banco de dados PostgreSQL.
O resto deste README conterá uma explicação detalhada de cada parte:
As variáveis são usadas para armazenar valores reutilizáveis no Makefile, tornando-o mais organizado e fácil de modificar.
-
DB_NAME=YOUR_DB_NAME
:- Define o nome do banco de dados para o backup ou restauração, onde você deve trocar
YOUR_DB_NAME
pelo nome do seu banco de dados.
- Define o nome do banco de dados para o backup ou restauração, onde você deve trocar
-
DB_USER=YOUR_USER_NAME
:- Especifica o nome do usuário do banco de dados PostgreSQL, onde você deve trocar
YOUR_USER_NAME
pelo seu nome de usuário com acesso administrador ao banco de dados.
- Especifica o nome do usuário do banco de dados PostgreSQL, onde você deve trocar
-
BACKUP_ROOT=/backups
:- Define o diretório raiz onde os backups serão armazenados, onde por padrão será
backups
mas pode ser alterado de acordo com sua vontade.
- Define o diretório raiz onde os backups serão armazenados, onde por padrão será
-
DATE=$(shell date +'%Y/%m')
:- Usa o comando
date
para criar uma string com o ano e o mês atuais no formatoYYYY/MM
.
- Usa o comando
-
TIMESTAMP=$(shell date +'%d-%m-%Y_%H-%M-%S')
:- Gera um carimbo de data e hora no formato
DD-MM-YYYY_HH-MM-SS
.
- Gera um carimbo de data e hora no formato
-
BACKUP_DIR=$(BACKUP_ROOT)/$(DATE)
:- Define o caminho do diretório de backup, incluindo ano e mês.
-
BACKUP_FILE=$(BACKUP_DIR)/$(TIMESTAMP).sql.gz
:- Especifica o nome completo do arquivo de backup.
-
RESTORE_LOG=$(BACKUP_ROOT)/restore.log
:- Define o caminho para o arquivo de log de restauração.
all: backup
:- Define
backup
como o alvo padrão que será executado caso nenhum outro alvo seja especificado.
- Define
Este alvo cria backups do banco de dados executando os passos a baixo.
-
@echo
:- Exibe mensagens para o usuário explicando as etapas que estão sendo executadas.
-
mkdir -p $(BACKUP_DIR)
:- Cria o diretório de backup, incluindo todos os diretórios pai necessários.
-
pg_dump -U $(DB_USER) -d $(DB_NAME) | gzip > $(BACKUP_FILE)
:- Usa o comando
pg_dump
do Postgres para exportar o banco de dados egzip
para comprimir o resultado, armazenando-o no arquivo de backup.
- Usa o comando
-
Estrutura condicional:
- Verifica se o comando foi bem-sucedido:
echo "Backup completed successfully: $(BACKUP_FILE)"
se for bem-sucedido.echo "Backup failed."
eexit 1
se falhar.
- Verifica se o comando foi bem-sucedido:
Este alvo restaura um backup existente.
-
Verificação de variáveis:
-
[ -z "$(RESTORE_FILE)" ]
: Garante que o usuário forneça o caminho do arquivo de backup a ser restaurado. -
Mensagem de erro e exemplo de uso:
echo "Error: Provide the RESTORE_FILE variable when running make." echo "Usage: make restore RESTORE_FILE=/path/to/backup.sql.gz"
-
-
Verificação de existência do arquivo:
[ ! -f "$(RESTORE_FILE)" ]
:- Garante que o arquivo fornecido existe.
-
Comando de restauração:
gunzip -c $(RESTORE_FILE) | psql -U $(DB_USER) $(DB_NAME) 2>> $(RESTORE_LOG)
:- Descomprime o arquivo de backup e o passa diretamente para o comando
psql
, restaurando o banco de dados. - Redireciona mensagens de erro para um arquivo de log.
- Descomprime o arquivo de backup e o passa diretamente para o comando
-
Estrutura condicional:
- Verifica se a restauração foi bem-sucedida:
echo "Restore completed successfully."
se bem-sucedida.echo "Restore failed. Check log at $(RESTORE_LOG)."
se falhar.
- Verifica se a restauração foi bem-sucedida:
Este alvo remove backups antigos.
-
Mensagem informativa:
echo "Cleaning backups older than 7 days in $(BACKUP_ROOT)"
: Informa o usuário sobre a limpeza.
-
Comando de limpeza:
find $(BACKUP_ROOT) -type f -mtime +7 -exec rm -v {} \;
:- Localiza e remove arquivos no diretório
$(BACKUP_ROOT)
que são mais antigos que 7 dias.
- Localiza e remove arquivos no diretório
-
Backup:
-
Execute:
make backup
-
Resultado:
- Um arquivo de backup é criado em
/backups/YYYY/MM
.
- Um arquivo de backup é criado em
-
-
Restauração:
-
Execute:
make restore RESTORE_FILE=/path/to/backup.sql.gz
-
Resultado:
- Restaura o banco de dados do arquivo especificado.
-
-
Limpeza:
-
Execute:
make clean
-
Resultado:
- Remove backups antigos com mais de 7 dias.
-
- Automação: Simplifica tarefas repetitivas como backup e restauração.
- Reusabilidade: Facilita a modificação com variáveis configuráveis.
- Manutenção: Estrutura clara e fácil de entender.
- [Template de Docker + PostgreSQL + Auto Backup + Restauração com Cron e Makefile]