XAMPPのMySQLが起動しなくなった時のデータ救出方法
作成日:2026.04.05
XAMPPのMySQL起動エラーでお困りの開発者向けに、データ損失を防ぎながら行なう応急的な復旧方法を詳しく紹介。通常の手段では解決しない場合、ファイルシステムレベルでのデータ救出技法を使う具体的な手順をまとめました。
目次
XAMPPのMySQLが起動しなくなってしまった
原因はともかくとして、ローカルマシンで動かしているXAMPPのMySQLがデータ破損で起動しなくなってしまい、ひとまずMySQL内のデータをsqlファイルとして取り出したい、といった時のための手順メモです。
InnoDB Force Recovery モードで MySQL を起動してみてもうまくいかなかった場合などの参考に。
前提
MySQLのストレージエンジンとしてInnoDBを使用していること。
大まかな手順
- MySQLのデータディレクトリをバックアップする
- MySQLを一旦インストール直後のまっさらな状態にする
- 取り出したいデータのみ、データディレクトリを上書きする
- 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制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。
MySQLのUPDATE文を使ったカラム値の一括置換
2025.02.06
MySQLで特定のカラム内の文字列を簡単に置換する方法を紹介します。この記事では、UPDATE文とREPLACE関数を組み合わせて、効率的にデータを更新する方法を解説します。
MySQLで新規カラムに既存データを一括登録する方法
2025.02.03
MySQLのUPDATE文を活用し、テーブルの新規カラム「更新日」に既存データ「作成日」を効率的に反映する手法を解説します。
XAMPP環境にStrawberry Perlを導入する方法:Windowsでの設定手順
2025.01.27
Windows版XAMPPに同梱されている簡易版Perlを、より機能豊富なStrawberry Perlに置き換える手順を解説します。ダウンロードから環境変数の設定、動作確認まで、順を追って説明しています。
XAMPP環境でPHPを8.1から8.3にバージョンアップする手順と注意点
2025.01.22
XAMPP環境のPHPを8.3にアップデートする際の具体的な手順を解説します。また、curl関連のエラーとその解消方法についても触れています。