PHPを使う方はみんな使っている若しくは使ったことがあるのではないでしょうか、ご存じのXAMPP。
このXAMPPで、特にMySQLを動かす際にエラーがよく出力されていたので、メモとしてここに記します。
##エラー現象
XAMPPのControl Panelを起動し、MySQLの「Start」ボタンを押した際に、MySQLが正常に起動しない(Startを押すとすぐに元のStartに戻る)
##エラー内容
実際にXAMPPのログに表示されたものは以下の通りでした。
11:18:27 [mysql] Error: MySQL shutdown unexpectedly.
11:18:27 [mysql] This may be due to a blocked port, missing dependencies,
11:18:27 [mysql] improper privileges, a crash, or a shutdown by another method.
11:18:27 [mysql] Press the Logs button to view error logs and check
11:18:27 [mysql] the Windows Event Viewer for more clues
11:18:27 [mysql] If you need more help, copy and post this
11:18:27 [mysql] entire log window on the forums
これを翻訳したりしてみましたが、ただのテンプレエラーメッセージで、エラーの原因はここでは判明しませんでしたが、エラーによりMySQL接続がシャットダウンしているという状況は分かりました。
ここで、XAMPPで機能が起動しない対処法(調査するべきこと)が3点。
α)ポート競合のCheck
β)前回クラッシュ時の破損ファイルの影響をCheck
γ)設定ファイル(ログファイル)のCheck
早速、それぞれ調べていきます。
###ポート競合のCheck
MySQLで使用するポート番号は3306番なので、このポート番号の競合を調べます。
XAMPPのControl Panelの右上にある「Netstat」ボタンをクリックし、表示されたリストの各ポート番号(New socket)を調べます。
ポート番号「3306番」を使用している(別の?)MySQLがあるようです。一応他の確認もしてみます。
###前回クラッシュ時の破損ファイルの影響をCheck
クラッシュ時の破損ファイルが邪魔をしていないか、プロセスファイルを調べます。
XAMPPでMySQLの「Config」ボタンをクリックし、をクリックします。
表示画面のフォルダにある「data」フォルダの中を調べます。
「data」フォルダ内にある、「ib_logfileから始まる全ファイル」と「ibdata1ファイル」を全てデスクトップに移します。
この行動の意味は、前回起動時にMySQLが強制終了していた際などに、これらのファイルが破損ファイルとして残てしまう場合があり、「data」フォルダから無くす(避難)させることでMySQLが正常に起動する場合がある為です。
移し終わったら、XAMPPのMySQLの起動確認を行います。
再度起動を試みましたが、エラーが出力されてしましました。破損ファイルの影響が原因ではないようです、
###設定ファイル(ログファイル)のCheck
XAMPPのControl Panelで、MySQLの「Logs」をクリックし、「mysql_error.log」クリックします。
開いたログを確認していくと、最下段に[ERROR]ログが確認できました。
※今回のようにXAMPPのMySQLでエラーが出力される原因の多くがここのようです。まず初めにこの箇所を確認するのが最短での解決かもしれません。
※ここでエラー原因が表示された際、スペルミスなどが原因のことが多くあるようです。
エラー内容は以下の通りでした。
やはり先程の「3306番ポート」を使用していたMySQLは、起動したかったMySQLとは別のMySQLのようです。
##MySQLのポート競合を防ぐ
別のMySQLが既に使用していたのが分かったので、今回使用するMySQLのポート番号を3306番以外に指定してポート番号の競合を避けたいと思います。
###利用するポート番号を変更する
以下の2通りのやり方でポート番号の変更(確認)を行っていきます。
δ)XAMPPの設定からポート番号を変更する
ε)XAMPPのMySQLの設定からポート番号を変更する
###XAMPPの設定からポート番号を変更する
XAMPPで起動しているもの(Apacheなど)を全て停止させ、XAMPP右上の「Config」をクリックします。
「Service and Port settings」をクリックします。
表示された画面の「Main Port」を任意の数字に変更します。変更したら「Save」をクリックして画面を閉じます。
※エラーが出力された場合
「Save」をクリックすると、「Error: Cannnot create file "C:\xmapp\xampp-control.ini" アクセスが拒否されました」とエラーメッセージが表示されました。
これは、「xampp-control.ini」へのアクセス許可に関する設定が原因です。
アクセス許可の設定を変更することで、エラーを回避することができます。
XAMPPのインストールディレクトリを展開し、「xampp-control.ini」を右クリックしてプロパティをクリックします。
「セキュリティ」タブの「編集」ボタンをクリックします。
「アクセス許可」の「許可」にチェックを入れていき、「適用」「OK」をクリックします。
再度MySQLのポート番号を「Save」すると、今度はエラーメッセージが出ることなく反映出来ました。
エラー出力時、
###XAMPPのMySQLの設定からポート番号を確認し変更を試みる
XAMPPのMySQLの「Config」をクリックし、「my.ini」をクリックします。
上記の2か所のportを書き換えて保存します。
※Apacheでは「#master-port = 」のが先程のポート番号になっているので、「Liste」で検索をかけて調べます。
Ctrl+F(macではcommand+F)で検索を表示させ、「Listen」を検索にかけます。
ここで「Listen 〇〇」と設定されているポート番号がダイレクトに表示されるので、番号の書き換えで修正が終わりますが、MySQLではにダイレクトに数字を入力したり、1行上の「#option - defalts to 3306」の数字を書き換えてもMySQLのポート番号は変更されませんでした。
###My.iniファイルかを直接変更する
My.iniはC:\MySQLの直下にあることが殆ど(WindowsではC:\Program\MySQLにあることもあります)です。テキストエディタなどで開いて書き換えます。
##MySQLの動作確認
XAMPPを再起動し「Start」をクリックします。
上手くMySQLが起動しました。
追記)なんとここで新たな問題が発生しまして、何故か先ほどまで正常に起動していたApacheがMySQLと全く同じエラーメッセージを出力を始めました。MySQLと同様にポート番号を変更しXAMPPを管理者権限で開きなおしたところエラーがなくなりました。
XAMPP初心者にとっては複雑なエラー対処に思えますが、一回試してみると案外単純な作業で、類似のエラーが出ても冷静に対処できるようになりました。