概要
XAMPPのコントロールパネルからMySqlをStartをしようとすると以下のようなエラーが出ました。
これはApacheやMySQLが起動に失敗した場合に表示されるテンプレのエラーメッセージ
でここだけではエラーの原因は特定できません。
詳しくはエラーのログから確認するのですがエラーの数が多すぎたので割愛します。
当記事では復旧までの手順のみとします。
12:36:20 [mysql] Error: MySQL shutdown unexpectedly.
12:36:20 [mysql] This may be due to a blocked port, missing dependencies,
12:36:20 [mysql] improper privileges, a crash, or a shutdown by another method.
12:36:20 [mysql] Press the Logs button to view error logs and check
12:36:20 [mysql] the Windows Event Viewer for more clues
12:36:20 [mysql] If you need more help, copy and post this
12:36:20 [mysql] entire log window on the forums
復旧までの手順
1.MySqlフォルダのバックアップ:重要
C:\xampp\mysql
をコピペでバックアップします。
デスクトップでもC:\xampp
でもどこでもいいのでエラーの状態のフォルダ
をバックアップします。
これを忘れると復旧できない可能性があるのでとても重要です。
2.他で起動しているMySQLのタスクをキルする
管理者権限で実行している場合はstartできないのでQuitで終了すれば起動できる可能性があります。
3.port番号を変える
ポートが重複していると起動できないので確認します。
コマンドプロントでもxammpコンパネでも好きな方法で確認します。
個人的にはcammpコンパネのNetstartボタンからが見やすくて好きです。
重複があればC:\xampp\mysql\data\my.ini
でポートを編集すれば起動できる可能性があります。
4.破損ファイルの退避
C:\xampp\mysql\data
内にある以下のファイルを削除します。
・ibdata1
・ib_logfileで始まる全ファイル
MySQLが強制終了した場合などにこれらのファイルが破損ファイルとして残る場合があり、退避することでMySQLが正常に起動するケースがあります。
5.バックアップからの復旧
C:\xampp\mysql\backup
からの復旧で、今回の事案を解消した方法です。
少し長くなるので次章で記述します。
バックアップからの復旧
前章の1と2を試して駄目だったのでバックアップファイルから復旧しました。
主な原因は正しくxammpを終了していない
ことです。
xammpコンパネでMySQLのstopせずにPCをシャットダウンすると起きることがあるみたいです。
復旧手順1.dataフォルダ内の初期テーブルを削除
C:\xampp\mysql\data
から以下のフォルダを削除します。
・mysql
・performance_schema
・phpmyadmin
・test
復旧手順2.バックアップフォルダ内のファルダをコピペ
にある以下のフォルダをC:\xampp\mysql\data
にコピペします。
手順1と削除したものと同じフォルダです。、
C:\xampp\mysql\backup
はxammp様が定期的に作成してくれています。
・mysql
・performance_schema
・phpmyadmin
・test
復旧手順3.MySqlのstart
これでstartできればほぼ完了です。
ただし、前章の手順4を実行している場合はMySqlを起動できてもテーブルにアクセスできないはずです。
原因はデータベースの情報を保存しているibdata1
を一度削除しているからです。
補足.前章の手順4を実行している場合
前章の手順1でバックアップしたフォルダ内のibdata1
をC:\xampp\mysql\data
内にコピペします。
まとめ
人間なのでミスは前提で、エラーやバグは仕方ないことと考えています。
大事なの前の状態に復旧することで、エラーやバグが発生した状態を保存することの重要さを改めて感じました。
参考
・xamppのMySQLがshutdownエラーで起動できない、タスクキルでもport変えても直らないのをようやく解決できた話。
・XAMPPでMySQLがStart出来ない場合の対処方法