Falhas podem ser de vários tipos: problemas de hardware, queda de energia, bug no código ou, o que não é raro, aquele admin distraído que deleta o banco sem querer achando que era "algo velho". Nessas horas, ter backup e um processo de recuperação bem ensaiado vira sua "varinha mágica".
Bora ver como recuperar tudo, passo a passo, igual montar móvel da IKEA: sem desespero e seguindo o manual.
Passo 1. Analisando a causa da falha
Antes de sair correndo pra recuperar os dados, é importante entender o que rolou.
Erro no app ou no banco?
Dá uma olhada nos logs do seu app e do PostgreSQL (normalmente ficam em/var/log/postgresql/ou algo parecido, depende do seu SO). Procura por mensagens de erro.Problema de hardware?
Se o servidor tá com defeito físico (tipo HD zoado), primeiro garante que o hardware tá ok. Se o disco foi pro saco, conecta outro e tenta recuperar dele.Problemas de rede ou acesso?
Se a falha foi por causa da rede — provavelmente não precisa restaurar nada agora.Erro humano:
Confessa aí... alguém mandou umDROP DATABASE? Se sim, ainda dá pra tentar recuperar do backup.
Lembra que entender direitinho o motivo da falha ajuda a evitar que aconteça de novo.
Passo 2. Checando se tem backup disponível
Hora de garantir que temos um backup decente. Procura os últimos backups do banco que você fez com pg_dump ou pg_basebackup. Confere se eles estão inteiros. Se não lembra como faz isso, olha só:
- Usa o comando
ls -lpra ver o tamanho dos arquivos. Se o arquivo tá pequeno demais, pode ser problema. - Confere o arquivo com o comando
file. Tipo:
Você deve ver que é um dump SQL.file backup_file.sql
Se for um arquivo tar, testa se dá pra extrair:
tar -tf backup.tar
Sem erro? Show! Bora pro próximo passo.
Passo 3. Parando o PostgreSQL
Antes de começar a restaurar, é importante parar o servidor PostgreSQL pra garantir que ninguém vai mexer no meio do processo. Faz assim (como admin do servidor):
sudo systemctl stop postgresql
Parar o banco garante que nenhum processo vai atrapalhar a restauração.
Passo 4. Preparando um banco novo pra restaurar
Se seu banco foi deletado ou corrompido, primeiro cria ele de novo. Exemplo de comando:
createdb -U postgres new_database
Troca new_database pelo nome do seu banco.
Passo 5. Restaurando o backup
Vamos ver dois cenários principais de restauração:
Se você tem um backup SQL (
pg_dump): Pra restaurar, usa o comandopsql -U username -d new_database -f backup_file.sql
username— seu usuário do PostgreSQL.new_database— banco onde os dados vão ser importados.backup_file.sql— seu arquivo de backup.
- Se você tem um backup binário (
pg_basebackupoupg_dumpcomcustom):
Pra restaurar, usa:
Lembra que esses backups não são texto, são dados "compactados".pg_restore -U username -d new_database backup_file.dump
Dica extra:
- Se o backup tem só os dados, usa
--data-only. - Se quiser só a estrutura, coloca
--schema-only.
Passo 6. Iniciando o PostgreSQL e testando
Depois de restaurar, inicia o servidor:
sudo systemctl start postgresql
Agora é hora de testar. Tenta conectar no banco restaurado pelo psql ou pgAdmin. Faz uns SELECTs pra ver se os dados tão certinhos:
SELECT * FROM your_table_name LIMIT 10;
Se tudo parece ok, parabéns: dados recuperados!
Passo 7. Checando a integridade dos dados
Depois de restaurar, é importante garantir que os dados estão inteiros. Por exemplo:
Compara a quantidade de linhas nas tabelas com o backup:
SELECT COUNT(*) FROM your_table_name;Compara o resultado com o que tinha no backup (se tiver).
Usa checksums: Se você já tinha criado checksums pras tabelas, agora é hora de conferir:
md5sum backup_file.sqlConfere as relações entre tabelas: Garante que as FOREIGN KEY restauradas tão funcionando de boa.
Passo 8. Testando o app
Agora testa seu app que usa esse banco. Passa pelos principais fluxos. Tem erro? Tá tudo aparecendo certo?
Exemplos de erros reais na restauração
Bora ver uns casos pra mostrar como evitar problemas:
Versão do PostgreSQL incompatível.
Imagina que o backup foi feito na versão 12, mas o servidor agora tá na 15. Na hora de restaurar, vai dar erro.
Solução: usa a mesma versão do PostgreSQL que fez o backup, ou consulta a documentação de compatibilidade: PostgreSQL Documentation.Backup corrompido . Se o backup tá corrompido, pode perder parte dos dados.
Solução: usa replicação de backups (tipo, guarda várias versões).Erro ao restaurar tabela específica.
Se você restaura só uma tabela, mas as dependências (tipo foreign keys) não tão lá, pode dar erro.
Solução: sempre restaura as tabelas na ordem certa, começando pelas parent.
GO TO FULL VERSION