2023-07-12

XAMPP環境のMySQLが突然起動しなくなった! エラーの原因と対処方法を解説

XAMPPの記事

開発環境のひとつにXAMPPを使用しているのですが、突然MySQLのエラーが発生するようになり、MySQLが起動できなくなりました。
XAMPPに組み込まれているミドルウェアは複数ありますが、問題が発生したのはMySQLのみです。Apacheなどは問題なく起動できます。

解決にいたるまでに行った対処、解決方法をご紹介します。

発生は突然、原因は不明

MVCモデルのフレームワークを使用しているサイトで、データベース接続エラーが表示されました。
確認するとMySQLが起動しておらず、何度起動を試みても起動しません。

XAMPP Version: 7.4.30
OS: Windows10

データベース接続エラーが表示

スポンサーリンク

エラーの原因とさまざまな試み

調べてみたところ、同様のエラーが多く発生しているようです。
さまざまな対処方法が紹介されていて、簡単そうなものから試してみました。

●XAMPPエラーメッセージ

Error: MySQL shutdown unexpectedly.
This may be due to a blocked port, missing dependencies,
improper privileges, a crash, or a shutdown by another method.
Press the Logs button to view error logs and check
the Windows Event Viewer for more clues
If you need more help, copy and post this
entire log window on the forums

●MySQLエラーログ

InnoDB: Mutexes and rw_locks use Windows interlocked functions
InnoDB: Uses event mutexes
InnoDB: Compressed tables use zlib 1.2.11
InnoDB: Number of pools: 1
InnoDB: Using SSE2 crc32 instructions
InnoDB: Initializing buffer pool, total size = 16M, instances = 1, chunk size = 16M
InnoDB: Completed initialization of buffer pool
InnoDB: 128 out of 128 rollback segments are active.
InnoDB: Creating shared tablespace for temporary tables
InnoDB: Setting file 'C:\xampp\mysql\data\ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
InnoDB: File 'C:\xampp\mysql\data\ibtmp1' size is now 12 MB.
InnoDB: Waiting for purge to start
InnoDB: 10.4.25 started; log sequence number 38480450; transaction id 52477
InnoDB: Loading buffer pool(s) from C:\xampp\mysql\data\ib_buffer_pool
Plugin 'FEEDBACK' is disabled.
Server socket created on IP: '::'.

上記エラーメッセージを検索し、関係ありそうな解決方法をひとつづつ確認。設定ファイルmy.iniの記述内容の変更や、ポート(3306)の重複チェックなど試みましたが解消しません。

そもそもエラーの原因は?

どうやら、MySQLを起動させたままPCをシャットダウンしたことが原因のようです。
PCは毎日、シャットダウンと起動を行っています。しかしXAMPPに関してはPCの起動に合わせて自動スタート、PCのシャットダウンと同じタイミングで停止しており、起動と停止についてまったく意識していません。
本当はPCの起動、シャットダウンとは別に、XAMPP(MySQL)の起動および停止を行ったほうがよいとのこと。言われてみれば当然ですよね、XAMPPからすれば毎日強制終了させられている状況ですので、データに破損や不整合が起きてしまうわけです。

今後はXAMPPの自動起動をやめて手動での起動。またPCのシャットダウンに先立ちXAMPPアプリケーションの停止を行います。

エラーの解決にいたった対処方法

解決方法をご紹介します。

1.バックアップデータを作成

まずデータベースのデータをまるっとコピーしバックアップします。
C:\xampp\mysql\ディレクトリ内の、dataフォルダをコピーし別名で保存します。ここでは同じディレクトリにdata_bkとフォルダ名を指定して保存しました。

DBデータ: C:\xampp\mysql\data
バックアップデータ: C:\xampp\mysql\data_bk

2.dataフォルダ内の自分が作成したDB以外を削除

上の2つのDB(フォルダ)はわたしが作成したデータベースです。これら以外のフォルダおよびファイルを全て削除します。
ちょっと怖いですが、先ほどバックアップを作成していますので、思い切りが大事です。

dataフォルダ内の自分が作成したDB以外を削除

以下は削除対象のフォルダ。また同階層のファイルも全て削除します。
・mysql
・performance_schema
・phpmyadmin
・test

同階層のファイルも全て削除

任意に作成したデータベースのみが残った状態です。

3.backupフォルダの中身をdataフォルダへコピー

dataフォルダと同じ階層にbackupというフォルダが存在します。
backupフォルダの中身をすべてコピーして、dataフォルダにペーストします。

バックアップデータdata_bkフォルダ内のibdata1ファイルをdataへコピー

4.バックアップデータdata_bkフォルダ内のibdata1ファイルをdataへコピー

はじめに作成したバックアップデータdata_bkフォルダにibdata1という名前のファイルがあります。
ibdata1ファイルをdataフォルダ内にコピーします。すでにdataフォルダ内にはibdata1ファイルが存在するはずですので、正確には上書きです。

ibdata1ファイルは、MySQLのトランザクションセーフのストレージエンジンです。データベースに関する、これまでの操作履歴など整合性を保つための情報が格納されているのでしょうか。

再起動

コントロールパネルから再起動すると、問題なく起動できました!
データの読み込み、書き込みもできました。

スポンサーリンク

まとめ

今回は厳しい戦いでした…。というのも、XAMPPで表示されるエラーやMySQLで吐き出されるエラーログの内容が、解決方法を示唆していない。つまり、エラーやログの内容を根拠に解決を図ることが難しいと実感しました。

一度解決しても、再度発生することがあるようです。対処法としてデータファイルを削除したりする必要があり、できれば起きてほしくないです。エラーが発生しないよう、PCのシャットダウンに先立ち、MySQLの停止を意識するようにしましょう。