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
- Navegue até a pasta do SSD antigo:
[SSD Externo]: C:\xampp\mysql\data\
🛠️ Passo 2 – Pare o MySQL do XAMPP atual
- Abra o Painel de Controle do XAMPP.
- Clique em Stop no serviço MySQL, caso esteja ativo.
- Na pasta do banco de dados que deseja recuperar, verifique se:
- Os arquivos
.ibd
(dados) e.frm
(estrutura) estão salvos.
- Os arquivos
- 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(), ?)
✅ Pré-requisitos
- XAMPP com MySQL/MariaDB instalado e funcionando.
- Arquivos antigos da tabela:
- Nome do banco:
newsletter
- Nome da tabela:
subscribers
- Nome da tabela:
- Nome do banco:
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)
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
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;
⚠️ 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;
Isso remove o
.ibd
recém-criado para que possamos substituir pelo antigo.
4. 📁 Substitua o .ibd
- 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;
Se tudo estiver correto, nenhum erro será exibido.
6. 🔍 Verifique os dados
SELECT * FROM subscribers;
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);
✅ 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)