LOADING

BLOG

HOME > BLOG > 技術 > MySQL > XAMPPのMySQLがエラーで起動できないときの対処法

XAMPPのMySQLがエラーで起動できないときの対処法

MySQLXAMPP技術環境構築

ローカル開発環境として数年間XAMPPを利用しています。
しかし、最近パソコンを新調したため、新しいパソコンでもXAMPPで環境を組み、開発していたところMySQL shutdown unexpectedlyというエラーが頻発するようになりました。

エラーが発生するとMySQLが起動しなくなり、非常に焦ったので解決方法をまとめます。

MySQL shutdown unexpectedlyというエラー

エラーが発生した際、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

内容としてはポートの重複やファイルの破損などが原因である可能性があると書かれています。

念のため、ポートの重複を確認します。
XAMPPのコントロールパネル右上にNetstatボタンがあり、クリックするとポートの確認ができます。
MySQLのポートである3306が使用されていなければ、ポート重複が原因ではありません。

MySQLのエラーログを確認

XAMPPのコントロールパネルに表示されているメッセージには、エラーログを見るようにと書かれているため、指示に従います。

コントロールパネルのMySQLの列にあるLogsボタンをクリックし、表示されるドロップダウンからmysql_error.logを選択します。
そして開かれたエラーログファイル内より、対象のエラーログを探します。
[ERROR]と記載されている行かつ、今回の発生日時から対象のエラーログを特定します。

今回は以下のようなログが残っていました。

[ERROR] InnoDB: Your database may be corrupt or you may have copied the InnoDB tablespace but not the InnoDB log files. Please refer to https://mariadb.com/kb/en/library/innodb-recovery-modes/ for information about forcing recovery.

データベースの破損等が記載されていますが、このエラーログでは何もわかりませんでした。

解決手順

ここからが実際にエラーが解決した方法です。

手順全体の概要としては、一時的にデータを退避させバックアップから破損ファイルの復元を行います。

dataフォルダを退避

まずはデータベースのデータファイルを退避します。

XAMPPのコントロールパネル右側のExplorerボタンをクリックし、XAMPPのインストールフォルダを開きます。
開いたxamppフォルダ内にあるmysqlフォルダを開き、さら中にあるdataフォルダをコピーして、デスクトップ等の安全な場所に退避します。

dataフォルダパス(例):C:\xampp\mysql\data

コピーするフォルダ:/xampp/mysql/data/

破損ファイルの削除

dataフォルダにあるファイルやフォルダを削除します。
削除対象は自分で作成したデータベース名のフォルダ以外のファイルとフォルダです。
自分で作成したデータベース名のフォルダは削除しないでください。

破損ファイルを復旧

dataフォルダから1つ上の階層に戻って、backupフォルダを開きます。

backupフォルダパス(例):C:\xampp\mysql\backup

backupフォルダ内にあるすべてのフォルダとファイルをコピーし、dataフォルダへペーストします。
対象となるフォルダとファイルは以下のものです。

mysql
performance_schema
phpmyadmin
test
aria_log.00000001
aria_log_control
ib_buffer_pool
ib_logfile0
ib_logfile1
ibdata1
ibtmp1
multi-master.info
my.ini

退避フォルダからファイルをコピー

退避したdataフォルダからibdata1ファイルをコピーして、元のdataフォルダへペーストします。
復旧したbackupフォルダのものとファイル名が重複しますが、そのまま上書きしてください。

MySQL再起動

最後にMySQLとApacheを再起動します。
無事エラーメッセージが表示されずにMySQLが起動すれば、復旧完了です。

予防方法

恐らく今回のエラーの原因はXAMPPを正常終了しなかったためだと考えられます。
毎回終了時にはApacheやMySQLをStopボタンから停止し、コントロールパネルのQuitボタンでXAMPPを終了させないといけません。

XAMPPを起動させたままWindowsをシャットダウンさせたり、XAMPPウインドウのバツボタンで閉じると、今回のようなエラーが発生するようです。

以前のパソコンではこのようなエラーは1度も起きなかったのですが、パソコンそのものの環境による差なのか、XAMPPのバージョンによる差なのかはわかりませんでした。

XAMPPがQuitできないとき

また、私の環境ではXAMPPのQuitボタンでエラーが出て終了できないという現象も発生しました。
エラーの内容としては「アクセスが拒否されました。」というものでした。

エラーの原因

エラーの原因は、実行したユーザーに権限がないことです。
XAMPPを実行する際に「管理者として実行」をすることでエラーを回避できますが、毎回「管理者として実行」の操作を行うのが面倒です。
そこで常に「管理者として実行」されるように変更することが可能です。

常に「管理者として実行」されるようにする

常に「管理者として実行」されるようにするには、XAMPPのインストールフォルダ内にあるxampp-control.exeの上で右クリックをし、プロパティを開きます。

xampp-controlパス(例):C:\xampp\xampp-controll.exe

プロパティの「互換性」タブを開き、「管理者としてこのプログラムを実行する」にチェックを入れて「適用」をクリックします。

以上で次回からXAMPPが管理者として実行されるようになり、Quitの際に発生していたエラーがなくなります。