DEV Community

Cover image for 🛠️ Como Recuperar um Banco de Dados MySQL/MariaDB Usando .ibd e .frm no XAMPP
Pro Well
Pro Well

Posted on

🛠️ Como Recuperar um Banco de Dados MySQL/MariaDB Usando .ibd e .frm no XAMPP

Este tutorial ensina como recuperar uma tabela InnoDB no XAMPP a partir de arquivos .frm e .ibd, mesmo quando o banco original foi perdido e a estrutura da tabela só está disponível via um INSERT no código PHP.

📦 Cenário

Seu notebook queimou ou o sistema antigo foi corrompido e não inicializa mais?

Calma, nem tudo está perdido!😉

Se o seu HD ou SSD ainda estiver funcional, há boas chances de recuperar seus bancos de dados (ou ao menos os dados inseridos) com relativa facilidade.

No meu caso, infelizmente, meu notebook antigo “foi para Valhalla”. O conserto se mostrou inviável, e a única opção foi adquirir um novo — com memória, processador e tecnologia que não fossem da primeira década dos anos 2000 (sim, sou do tipo que usa o jeans até rasgar e o tênis até furar a sola).😁

O problema é que eu não havia feito o backup de alguns arquivos, incluindo um sistema simples, gratuito e funcional de newsletter que estou desenvolvendo — essencial para meus estudos e, quem sabe, com potencial comercial.🤑

Felizmente, os arquivos estavam intactos no SSD. Com um adaptador externo, consegui acessá-los e fazer o backup em outro computador. Porém, nem tudo são flores: apenas copiar e colar os arquivos não permite executar os bancos de dados no PHPMyAdmin.

Além disso, sobrescrever arquivos como ibdata1, ib_logfile0 e ib_logfile1 pode ser desastroso se você já tiver outros bancos ativos no novo computador. Substituir o XAMPP atual só é viável se não houver nenhum banco importante em uso no sistema novo.

Portanto, compartilho a seguir um passo a passo completo para recuperar seus bancos de dados com segurança:

O que você precisa:

  • O SSD antigo conectado via adaptador.
  • O XAMPP instalado e funcionando no computador atual.
  • Acesso à pasta do XAMPP antigo no SSD (geralmente C:\xampp\).
  • O nome do banco de dados que deseja recuperar.

🔍 Passo 1 – Localize os arquivos do banco de dados antigo

  1. Navegue até a pasta do SSD antigo:

[SSD Externo]: C:\xampp\mysql\data\

🛠️ Passo 2 – Pare o MySQL do XAMPP atual

  1. Abra o Painel de Controle do XAMPP.
  2. Clique em Stop no serviço MySQL, caso esteja ativo.
  3. Na pasta do banco de dados que deseja recuperar, verifique se:
    • Os arquivos .ibd (dados) e .frm (estrutura) estão salvos.
  4. Em seu site (neste caso, em PHP), verifique a estrutura de suas tabelas em seu script, por exemplo:
INSERT INTO subscribers (email, subscribed_at, ip_address) VALUES (?, NOW(), ?)
Enter fullscreen mode Exit fullscreen mode

✅ Pré-requisitos

  • XAMPP com MySQL/MariaDB instalado e funcionando.
  • Arquivos antigos da tabela:
    • Nome do banco: newsletter
      • Nome da tabela: subscribers

subscribers.frm
subscribers.ibd
db.opt (opcional)

⚠️ Vale mencionar que, os nomes "newsletter" e "subscribers", se referem respectivamente ao meu banco de dados e à tabela que eu criei, assim como os nomes das colunas dos exemplos à seguir.

🧭 Etapas do Processo

1. 🔍 Identifique os campos usados no seu PHP

Com base no código PHP:

INSERT INTO subscribers (email, subscribed_at, ip_address)
Enter fullscreen mode Exit fullscreen mode

Você já sabe que a tabela subscribers tem os campos:

  • email
  • subscribed_at
  • ip_address
  • (opcionalmente id como chave primária, se o banco usava auto incremento)

2. 🛠️ Crie a estrutura da tabela (sem índices secundários)

Abra o terminal do XAMPP e digite:

mysql -u root -p
Enter fullscreen mode Exit fullscreen mode

Só pressione Enter se não houver senha


⚠️ O comando USE newsletter acima foi digitado, pois o database já havia sido copiado. Como você ainda não copiou nada, após digitar mysql -u root -p no prompt, realize o procedimento a seguir:

No prompt do MySQL, crie o banco de dados:

CREATE DATABASE IF NOT EXISTS newsletter;
USE newsletter;

DROP TABLE IF EXISTS subscribers;

CREATE TABLE subscribers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(255),
    subscribed_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    ip_address VARCHAR(45)
) ENGINE=InnoDB;
Enter fullscreen mode Exit fullscreen mode

⚠️ Observação: Evitamos usar UNIQUE, INDEX ou FOREIGN KEY por enquanto, pois o .cfg está ausente e causaria erro no IMPORT.

3. 🧹 Descarte o espaço de tabela (DISCARD)

Ainda no MySQL:

ALTER TABLE subscribers DISCARD TABLESPACE;
Enter fullscreen mode Exit fullscreen mode

Isso remove o .ibd recém-criado para que possamos substituir pelo antigo.

4. 📁 Substitua o .ibd

  1. Vá até:

C:\xampp\mysql\data\newsletter\

Substitua o arquivo subscribers.ibd pelo que você recuperou do SSD antigo.

✅ Certifique-se de que o arquivo tem o mesmo nome e extensão.

5. 📥 Importe o espaço de tabela (IMPORT)

Volte ao terminal MySQL:

ALTER TABLE subscribers IMPORT TABLESPACE;
Enter fullscreen mode Exit fullscreen mode

Se tudo estiver correto, nenhum erro será exibido.

6. 🔍 Verifique os dados

SELECT * FROM subscribers;
Enter fullscreen mode Exit fullscreen mode

Agora você deve ver todos os registros recuperados!

➕ (Opcional) Recriar índices

Se quiser adicionar de volta a restrição de unicidade no email, execute:

ALTER TABLE subscribers ADD UNIQUE (email);
Enter fullscreen mode Exit fullscreen mode

✅ Conclusão

Com apenas os arquivos .ibd e .frm, e um trecho do seu código PHP que usa INSERT, você consegue:

  • Reconstruir a estrutura da tabela.
  • Recuperar os dados com segurança.
  • Manter seu sistema funcional sem sobrescrever ibdata1.

📎 Dica bônus: nomeie seu backup com data

Sempre que recuperar arquivos, copie-os para uma pasta tipo:
backup_banco_2025-07-09/
Assim você evita sobrescrever arquivos sem querer.😎

Feito com ❤️ por Devdavez

Top comments (0)