<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Pro Well</title>
    <description>The latest articles on DEV Community by Pro Well (@prowell_etec).</description>
    <link>https://dev.to/prowell_etec</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3343631%2Fdaff0879-a329-445c-924a-fdad890e8d15.png</url>
      <title>DEV Community: Pro Well</title>
      <link>https://dev.to/prowell_etec</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prowell_etec"/>
    <language>en</language>
    <item>
      <title>🛠️ Como Recuperar um Banco de Dados MySQL/MariaDB Usando .ibd e .frm no XAMPP</title>
      <dc:creator>Pro Well</dc:creator>
      <pubDate>Thu, 10 Jul 2025 23:39:07 +0000</pubDate>
      <link>https://dev.to/prowell_etec/como-recuperar-um-banco-de-dados-mysqlmariadb-usando-ibd-e-frm-no-xampp-154c</link>
      <guid>https://dev.to/prowell_etec/como-recuperar-um-banco-de-dados-mysqlmariadb-usando-ibd-e-frm-no-xampp-154c</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  📦 &lt;strong&gt;Cenário&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Seu notebook queimou ou o sistema antigo foi corrompido e não inicializa mais?&lt;/p&gt;

&lt;p&gt;Calma, nem tudo está perdido!😉&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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).😁&lt;/p&gt;

&lt;p&gt;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.🤑&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Além disso, sobrescrever arquivos como &lt;code&gt;ibdata1&lt;/code&gt;, &lt;code&gt;ib_logfile0&lt;/code&gt; e &lt;code&gt;ib_logfile1&lt;/code&gt; 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.&lt;/p&gt;

&lt;p&gt;Portanto, compartilho a seguir um passo a passo completo para recuperar seus bancos de dados com segurança:&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;O que você precisa:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;O SSD antigo conectado via adaptador.&lt;/li&gt;
&lt;li&gt;O XAMPP instalado e funcionando no computador atual.&lt;/li&gt;
&lt;li&gt;Acesso à pasta do XAMPP antigo no SSD (geralmente &lt;code&gt;C:\xampp\&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;O nome do banco de dados que deseja recuperar.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔍 &lt;strong&gt;Passo 1 – Localize os arquivos do banco de dados antigo&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Navegue até a pasta do SSD antigo:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;[SSD Externo]: C:\xampp\mysql\data\&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ &lt;strong&gt;Passo 2 – Pare o MySQL do XAMPP atual&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Abra o &lt;strong&gt;Painel de Controle do XAMPP&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Clique em &lt;strong&gt;Stop&lt;/strong&gt; no serviço MySQL, caso esteja ativo.&lt;/li&gt;
&lt;li&gt;Na pasta do banco de dados que deseja recuperar, verifique se:

&lt;ul&gt;
&lt;li&gt;Os &lt;strong&gt;arquivos &lt;code&gt;.ibd&lt;/code&gt;&lt;/strong&gt; (dados) e &lt;code&gt;.frm&lt;/code&gt; (estrutura) estão salvos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Em seu site (neste caso, em PHP), verifique a estrutura de suas tabelas em seu script, por exemplo:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INSERT INTO subscribers (email, subscribed_at, ip_address) VALUES (?, NOW(), ?)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Pré-requisitos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;XAMPP com &lt;strong&gt;MySQL/MariaDB&lt;/strong&gt; instalado e funcionando.&lt;/li&gt;
&lt;li&gt;Arquivos antigos da tabela:

&lt;ul&gt;
&lt;li&gt;Nome do banco: &lt;code&gt;newsletter&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;Nome da tabela: &lt;code&gt;subscribers&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;subscribers.frm&lt;br&gt;
subscribers.ibd&lt;br&gt;
db.opt (opcional)&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Vale mencionar que, os nomes &lt;strong&gt;"newsletter"&lt;/strong&gt; e &lt;strong&gt;"subscribers"&lt;/strong&gt;, &lt;strong&gt;se referem respectivamente ao meu banco de dados e à tabela que eu criei&lt;/strong&gt;, assim como os nomes das colunas dos exemplos à seguir.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  🧭 Etapas do Processo
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. 🔍 Identifique os campos usados no seu PHP
&lt;/h3&gt;

&lt;p&gt;Com base no código PHP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INSERT INTO subscribers (email, subscribed_at, ip_address)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você já sabe que a tabela &lt;code&gt;subscribers&lt;/code&gt; tem os campos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;email&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subscribed_at&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ip_address&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;(opcionalmente &lt;code&gt;id&lt;/code&gt; como chave primária, se o banco usava auto incremento)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. 🛠️ Crie a estrutura da tabela (sem índices secundários)
&lt;/h3&gt;

&lt;p&gt;Abra o &lt;strong&gt;terminal do XAMPP&lt;/strong&gt; e digite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mysql -u root -p
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Só pressione &lt;code&gt;Enter&lt;/code&gt; se não houver senha&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdgl8im6v118fldu6mlw2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdgl8im6v118fldu6mlw2.png" alt=" " width="668" height="304"&gt;&lt;/a&gt;&lt;br&gt;
⚠️ O comando &lt;strong&gt;&lt;code&gt;USE newsletter&lt;/code&gt;&lt;/strong&gt; acima foi digitado, pois o database já havia sido copiado. Como você ainda não copiou nada, após digitar &lt;code&gt;mysql -u root -p&lt;/code&gt; no prompt, realize o procedimento a seguir:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No prompt do MySQL&lt;/strong&gt;, crie o banco de dados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ Observação: Evitamos usar UNIQUE, INDEX ou FOREIGN KEY por enquanto, pois o &lt;code&gt;.cfg&lt;/code&gt; está ausente e causaria erro no IMPORT.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. 🧹 Descarte o espaço de tabela (DISCARD)
&lt;/h3&gt;

&lt;p&gt;Ainda no MySQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALTER TABLE subscribers DISCARD TABLESPACE;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Isso remove o &lt;code&gt;.ibd&lt;/code&gt; recém-criado para que possamos substituir pelo antigo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4. 📁 Substitua o &lt;code&gt;.ibd&lt;/code&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Vá até:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;C:\xampp\mysql\data\newsletter\&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Substitua o arquivo &lt;code&gt;subscribers.ibd&lt;/code&gt; pelo que você recuperou do SSD antigo.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;✅ Certifique-se de que o arquivo tem o mesmo nome e extensão.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  5. 📥 Importe o espaço de tabela (IMPORT)
&lt;/h3&gt;

&lt;p&gt;Volte ao terminal MySQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALTER TABLE subscribers IMPORT TABLESPACE;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se tudo estiver correto, &lt;strong&gt;nenhum erro será exibido&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. 🔍 Verifique os dados
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM subscribers;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk47yyx6jrx7enphukka0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk47yyx6jrx7enphukka0.png" alt=" " width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Agora você deve ver todos os registros recuperados!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ➕ (Opcional) Recriar índices
&lt;/h2&gt;

&lt;p&gt;Se quiser adicionar de volta a restrição de unicidade no &lt;code&gt;email&lt;/code&gt;, execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALTER TABLE subscribers ADD UNIQUE (email);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs4s1bmjlnd2voaujk3a6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs4s1bmjlnd2voaujk3a6.png" alt=" " width="590" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Conclusão
&lt;/h2&gt;

&lt;p&gt;Com apenas os arquivos &lt;code&gt;.ibd&lt;/code&gt; e &lt;code&gt;.frm&lt;/code&gt;, e um trecho do seu código PHP que usa &lt;code&gt;INSERT&lt;/code&gt;, você consegue:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reconstruir a estrutura da tabela.&lt;/li&gt;
&lt;li&gt;Recuperar os dados com segurança.&lt;/li&gt;
&lt;li&gt;Manter seu sistema funcional sem sobrescrever &lt;code&gt;ibdata1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📎 Dica bônus: nomeie seu backup com data
&lt;/h2&gt;

&lt;p&gt;Sempre que recuperar arquivos, copie-os para uma pasta tipo:&lt;br&gt;
&lt;code&gt;backup_banco_2025-07-09/&lt;/code&gt;&lt;br&gt;
Assim você evita sobrescrever arquivos sem querer.😎&lt;/p&gt;

&lt;p&gt;Feito com ❤️ por &lt;a href="https://www.devdavez.com.br" rel="noopener noreferrer"&gt;&lt;u&gt;Devdavez&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>mysql</category>
      <category>php</category>
    </item>
  </channel>
</rss>
