CodeGym /Cursos /SQL SELF /Recuperação de dados após falha

Recuperação de dados após falha

SQL SELF
Nível 44, Lição 2
Disponível

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.

  1. 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.

  2. 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.

  3. Problemas de rede ou acesso?
    Se a falha foi por causa da rede — provavelmente não precisa restaurar nada agora.

  4. Erro humano:
    Confessa aí... alguém mandou um DROP 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 -l pra ver o tamanho dos arquivos. Se o arquivo tá pequeno demais, pode ser problema.
  • Confere o arquivo com o comando file. Tipo:
    file backup_file.sql
    
    Você deve ver que é um dump 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:

  1. Se você tem um backup SQL (pg_dump): Pra restaurar, usa o comando

    psql -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.
  1. Se você tem um backup binário (pg_basebackup ou pg_dump com custom):
    Pra restaurar, usa:
    pg_restore -U username -d new_database backup_file.dump
    
    Lembra que esses backups não são texto, são dados "compactados".

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:

  1. 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).

  2. Usa checksums: Se você já tinha criado checksums pras tabelas, agora é hora de conferir:

    md5sum backup_file.sql
    
  3. Confere 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:

  1. 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.

  2. 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).

  3. 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.

2
Tarefa
SQL SELF, nível 44, lição 2
Bloqueado
Restauração de banco de dados a partir de um arquivo SQL
Restauração de banco de dados a partir de um arquivo SQL
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION