技術資料

XAMPPのMySQLが起動しなくなった時のデータ救出方法

作成日:2026.04.05

XAMPPのMySQL起動エラーでお困りの開発者向けに、データ損失を防ぎながら行なう応急的な復旧方法を詳しく紹介。通常の手段では解決しない場合、ファイルシステムレベルでのデータ救出技法を使う具体的な手順をまとめました。

XAMPPのMySQLが起動しなくなってしまった

原因はともかくとして、ローカルマシンで動かしているXAMPPのMySQLがデータ破損で起動しなくなってしまい、ひとまずMySQL内のデータをsqlファイルとして取り出したい、といった時のための手順メモです。

InnoDB Force Recovery モードで MySQL を起動してみてもうまくいかなかった場合などの参考に。

前提

MySQLのストレージエンジンとしてInnoDBを使用していること。

大まかな手順

  1. MySQLのデータディレクトリをバックアップする
  2. MySQLを一旦インストール直後のまっさらな状態にする
  3. 取り出したいデータのみ、データディレクトリを上書きする
  4. MySQLを起動して、データをsqlファイルとしてエクスポートする

以下、各手順の詳細です。

注意点

作業を始める前に、MySQLを完全に停止させてください。

また、この手順はデータの損失を引き起こす可能性があるため、慎重に実行してください。

1. MySQLのデータディレクトリをバックアップする

XAMPPのMySQLのデータディレクトリは、通常は以下の場所にあります。

C:\xampp\mysql\data

このディレクトリを丸ごとコピーして、別名で保存しておきます。例えば、C:\xampp\mysql\data_backup などといった名前で保存しておくと良いでしょう。このバックアップは、後で必要なデータを取り出すために使用します。

2. MySQLを一旦インストール直後のまっさらな状態にする

MySQLの初期状態のデータディレクトリは、通常、 C:\xampp\mysql\backup にあります。このディレクトリの中身は、

  • mysql/
  • performance_schema/
  • phpmyadmin/
  • test/
  • ib_logfile0
  • ib_logfile1
  • ibdata1
  • ……

のようなファイルやディレクトリが含まれています。これらの初期状態のデータの在処を確認した上で、以下の作業を行います。

続いて、MySQLのデータディレクトリを一旦削除して、まっさらな状態にします。前述の例で言えば、C:\xampp\mysql\data の中身を削除します。

空になったデータディレクトリに、初期状態のデータをコピーします。

これで、MySQLは初期状態のまっさらな状態になりました。

ここで一旦、MySQLを立ち上げてみて、正常に起動するかどうか確認してみましょう。初期状態のまっさらなMySQLが起動すればOKです。

※ユーザー権限なども初期状態に戻っているため、MySQLに root でログインする際のパスワードなども初期状態のものになります(XAMPPの場合、root でログインする際のパスワードは空文字列です)。

3. 取り出したいデータのみ、データディレクトリを上書きする

次に、バックアップしておいたデータディレクトリから、取り出したいデータのみをコピーして、まっさらな状態のデータディレクトリに上書きします。

例えば、sample_database という名前のデータベース内のテーブルを抽出したい場合、先ほどバックアップした C:\xampp\mysql\data_backup 内の sample_database ディレクトリが抽出対象になります。

この sample_database ディレクトリを丸ごと、先ほど初期状態に戻したデータディレクトリ C:\xampp\mysql\data 内にコピーします。

さらに、C:\xampp\mysql\data_backup 内にある ibdata1 ファイルをコピーします。

これで、取り出したいデータのみが入った状態のMySQLのデータディレクトリが完成しました。

改めてMySQLを起動して、データが正常に読み込まれていることを確認しましょう。

後は、mysqldump などでデータのエクスポートを行なって完了です。新たにインストールしなおしたMySQLにインポートするなどすればひとまず解決します。

ところで、 ibdata1 は何のファイル?

ibdata1 は MySQL の InnoDB ストレージエンジンが使用するデータファイルです。このファイルには、InnoDB テーブルスペースのデータとログ情報が格納されています。

MySQL では、InnoDB ストレージエンジンを使用している場合、テーブルのデータやインデックスなどの情報が ibdata1 ファイルに保存されます。したがって、ibdata1 ファイルをコピーすることで、InnoDB テーブルのデータを復元することができます。

ただし、ibdata1 ファイルは MySQL の内部構造に依存しているため、異なるバージョンの MySQL で使用する場合や、データベースの構成が異なる場合には、正常に動作しない可能性があります。そのため、データの復元を行う際には、同じバージョンの MySQL (あるいは XAMPP のバージョンも) を使用することが推奨されます。

じゃあ、データベース名のディレクトリには何が入っているの?

MySQL のデータディレクトリ内のデータベース名のディレクトリには、そのデータベースに関連するテーブルの定義ファイルや、テーブルスペースファイルなどが格納されています。具体的には、以下のようなファイルが含まれています。

  • .frm ファイル: テーブルの定義を格納するファイルです。テーブルの構造やカラムの情報などが含まれています。
  • .ibd ファイル: InnoDB ストレージエンジンを使用している場合、テーブルスペースファイルが格納されます。テーブルのデータやインデックスなどが含まれています。
  • db.opt ファイル: データベースのオプション情報を格納するファイルです。

というわけで、データベース名のディレクトリと、ibdata1 ファイルをコピーすることで、応急処置的にデータを復元できるわけです。

この記事を書いた人

※上が私です。

奈良市を拠点に、27年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。

これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。

【制作会社・企業様向けサポート】
  • 専任エンジニアのいない企業様に対するシステム面の不安を解消
  • 柔軟な契約形態や短納期での対応により、急なニーズにも迅速にサポート
  • システムの企画段階から運用まで、ワンストップでのサービスを提供

Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。

ぜひ、プロフィールやWeb制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。

XAMPPのMariaDBでERROR 1130が発生したときの復旧手順

2026.08.05

XAMPPのMariaDBでERROR 1130が発生し、phpMyAdminやCLIから接続できなくなった際の復旧手順を紹介します。接続先とプロセスを確認し、データディレクトリをバックアップした上で、復旧モードから破損したmysql.global_privを検査・修復し、通常起動後の接続確認まで行います。

MySQL XAMPP

MySQLのLOAD DATA LOCAL INFILEの使い方:設定からファイルの読み込み確認まで

2026.10.20

MySQLのLOAD DATA LOCAL INFILEで、手元のファイルをテーブルへ読み込む方法を解説します。サーバー・クライアント双方の許可設定から、3行のデータを使った読み込み例、警告・件数・値の確認、読み込めない場合の切り分けまで紹介します。

MySQL

MySQLのビュー(VIEW)入門:テーブルとの違いと使いどころ

2026.10.18

MySQLのビュー(VIEW)とテーブルの違い、ビューが役立つ場面を解説します。CREATE VIEWによる作成方法を、注文データの抽出・集計例で紹介。元データの変更との関係や、更新・性能・参照権限の注意点も整理します。

MySQL

MySQLの正規表現でタイムアウト(Error Code 3699)が発生する原因と対処法

2026.10.17

MySQLの正規表現で発生する「Error Code 3699」の原因と対処法を解説します。SQLやパターンの見直し、一時テーブルを使った検索と整形の分離、最終手段としてのregexp_time_limitの変更と注意点を紹介します。

MySQL 正規表現

阿部辰也へのお仕事の依頼・お問い合わせ

軽いご相談もお気軽にどうぞ!

個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP