【 更新 】おすすめ記事はこちら

MySQL shutdown unexpectedlyと出てXAMPPが起動できない

「MySQL shutdown unexpectedly」と表示され、SQLが起動できないことがあります。

ここ最近は、作成したWebサイトのデータベースを入れ替えていて発生。

過去のケースでは、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

ポートの重複やファイルの破損などが原因として考えられますよーと言っています。

ちなみにコントロールパネルの「Netstat」でポートの確認ができます。MySQLは「3306」なので、同じものがなければOK。

XAMPPでポートを確認

直前の作業でSQLに変更を加えたり、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.

データベースの破損、テーブルスペースのコピーなどについて書かれているものの、いまいちピンとこない内容です。

とは言え、直前までデータベースを入れ替える作業をしていたので、何らかの不具合が発生したと考えれば良さそう。

違うメッセージが出ているときは、そのエラー内容を優先してください。

SQLデータを退避

コントロールパネルの「Explorer」からXAMPPファイルを開き、「mysql」をクリック。

mysqlフォルダをクリック

「data」というフォルダを探し、別の場所に丸ごとコピーして退避しておきます。

dataフォルダをクリック

「data」フォルダは、バックアップファイルとして一時保存します。一部のファイルを後ほど使用するので、この工程は省かないようにしてください。

既存ファイルを削除

複数のファイルやフォルダが入っています。その中にある、自分で作成したデータベース名のフォルダだけを残して、他は全て削除してください

既存ファイルを削除

既存ファイルをコピー

一つ上の階層に戻って「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

この時点ではまだデータベースの操作はできません。WordPressの例。

SQLのエラーメッセージ例

退避ファイルをコピー

退避側の「data」から「ibdata1」をコピーして、元の場所であるXAMPP側の「data」にペーストします。

ibdata1をコピー

最後にApacheを含めて再起動してください。

冒頭のようなエラーメッセージがコントロールパネルに赤く表示されなければ復旧完了です。

おわりに

原因がはっきりしていれば各種メッセージで知らせてくれるので、比較的分かりやすいと思います。

例えば、ポートの重複であればPort 3306 in use by… のような感じ。

原因不明なときや終了時に停止し忘れていたかも・・・ということなら今回の方法がおすすめです。

XAMPPは「STOP」で全て停止してから「Quit」で終了するのが正しい手順。右上の閉じるボタンだけでは停止できないんですよね。。

毎回復旧するのも手間なので、こまめに停止しておく方が無難といえば無難。

ただ、以前より壊れやすくなった印象なので、他のツールも検討しようかと思うこの頃です。