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制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。
XAMPPのMariaDBでERROR 1130が発生したときの復旧手順
2026.08.05
XAMPPのMariaDBでERROR 1130が発生し、phpMyAdminやCLIから接続できなくなった際の復旧手順を紹介します。接続先とプロセスを確認し、データディレクトリをバックアップした上で、復旧モードから破損したmysql.global_privを検査・修復し、通常起動後の接続確認まで行います。
MySQLのDATE_FORMATとTIME_TO_SEC:日時の表示と時間の数値化
2026.10.13
MySQLのDATE_FORMATで日時の表示を整える方法と、TIME_TO_SECで時間を秒数へ変換する方法を解説します。入力と結果を比較しながら、月と分の書式指定、NULL、負の時間、24時間を超える時間の扱いも紹介します。
MySQLのCASE式入門:条件に応じてSELECTの出力を切り替える
2026.10.12
MySQLのCASE式を使い、条件に応じてSELECTの出力値を切り替える方法を解説します。状態コードを表示名に変換する例を通して、基本構文、ELSEとNULLの扱い、条件が重なる場合のWHENの順序を紹介します。
MySQLで文字列を整形・抽出する:TRIM・SUBSTRING_INDEX・REGEXP_SUBSTRの使い方
2026.10.11
MySQLで取得する文字列から不要な空白を除いたり、区切り文字や正規表現を使って必要な部分を取り出したりする方法を紹介します。TRIM・SUBSTRING_INDEX・REGEXP_SUBSTRの基本構文と使い分けを、具体的なSQL例で解説。NULLや空文字、想定した形式に合わない値を扱う際の注意点も整理します。