XAMPPでMySQLをStartさせようと思ったのに、エラーが出て起動できない。
何とかして―!
XAMPPを使用して開発を行ってるとたびたび発生するMySQLの起動時エラー。
初めてなった時は、直すのにかなりの時間がかかったので、ここに備忘録としてエラーが起こった際のデバック方法を記載しておきます。
同じようにエラーが起こっている方は、このやり方で直せるかと思いますので、試してください。
エンジニアとして開発を行っていると、エラーに直面することは日常茶飯事です。
初学者の方がエラーに直面すると、ぜんぜん解決しなくてプログラミングをやめてしまう人が多いと思いまうすが、エラーのデバックには開発と同じくらい、もしくはそれよりも長い時間エラーの解消に時間をかけていることがあります。
なので、エラーが出たからと言って投げ出さず、問題を1つずつ解決していく力をつけていきましょう。
今回はXAMPPでエラーが発生したので、そのエラーを題材に、実際に行っているデバック方法を順を追ってご紹介します。
プログラミング初学者の方に、「デバックとはこんな思考で行っているんだな」と参考にしてもらえたら幸いです。
XAMPPで発生したエラー
今回発生したエラーは
XAMPP Control Panelで、MySQLの「Start」ボタンを押してもMySQLが正常に起動しないという現象で、Startボタンを押してもすぐに元に戻ってしまいます。
実際のエラーは下記のように表示されています。
何やら赤い文字で、とんでもないエラーが発生しているように見えます。
それでは、調査を開始していきます。
エラーの調査、デバック
まずは、先ほどのエラーを書き出してみます。
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
というエラーみたいですが、私は日本語しか分からないので、意味はさっぱりです。
googleさんに翻訳してもらいます。
エラー: MySQL が予期せずシャットダウンしました。 これは、ポートのブロック、依存関係の欠落、不適切な権限、クラッシュ、または別の方法によるシャットダウンが原因である可能性があります。 [ログ] ボタンを押してエラー ログを表示し、Windows イベント ビューアでさらなる手がかりを確認してください。さらにヘルプが必要な場合は、このログ ウィンドウ全体をコピーしてフォーラムに投稿してください。
これは、XAMPPのテンプレメッセージで、よく出るメッセージなので、エラーの直接的な原因までは分かりません。
ですが、
XAMPPでこのようなエラーが出た際に、必ず確認すべきことは下記の3つです。
エラーメッセージの冒頭にも書かれているので、メッセージ通りに確認していきたいと思います。
では、順番に確認していきます。
ポート競合をチェック
MySQLは初期設定のままだと、ポート番号「3306番」を使用しています。
この番号が、他のプログラムで使用されていないかチェックします。
XAMPP Control Panelの「Netstat」をクリックします。
表示された画面の中に、「3306番」を使用しているものはないか確認してください。
破損ファイルなどが邪魔していないかチェック
次に、前回クラッシュした際の破損ファイルなどが邪魔していないかチェックをしていきます。
XAMPP Control Panelで「Config」をクリックして、「<Browse>」をクリックします。
mysqlファイルが開くと思うので、そんの中の「data」ファイルの中を確認します。
dataフォルダの中に、
・ib_logfileという名前で始まる全ファイル
・iddata1
があった場合、このファイルを一旦デスクトップなどに退避させておきます。
退避が完了したら、MySQLを起動してみます。
場合によっては、前回起動時にMySQLが強制終了してしまった場合などに、これらのファイルが破損ファイルとして残ってしまう場合があり、退避することでMySQLが正常に起動することがあります。
ログファイルをチェック
ログファイルのチェックを行って行きます。
XAMPP Control Panelで「logs」をクリックして、「mysql_error.log」をクリックします。
表示されたエラーログを確認すると、
[ERROR]の個所で、エラーログが残っているので、これが原因になります。
今回のエラー内容は、
レプリケーションの設定で問題が発生していることを示しています。
具体的には、Slave I/O Threadがマスターサーバーに接続しようとした際に無効な(空の)ユーザー名を使用しているため、接続が失敗したことが原因のようです。
エラー内容が分かったら、後はエラーコードをGoogleで調べて、同じようなエラーが起こったことがあり、それを解決した人がいないかどうかをチェックしていきます。
今回ヒットした記事は下記の記事でした。
記事の内容通りに、作業を続行してみようと思います。
記事には、
- ib_logfile?
- ibdata?
- ibtmp?
- mysql.pid(あれば)
- master-????@*
- multi-master.info
- mysql-relay-bin-*
- relay-log-*
のファイルを、バックアップを行ったうえで、削除するとありましたので、バックアップを行ったうえでファイルを探し、削除していきます。
削除を行ったので、MySQLを再起動してみます。
正常に起動できたようです。
まとめ
今回は、XAMPPでのエラーをよくある解決方法を基準に順番に試していきました。
結果的には、エラーログを先に見た方が解決は早かったみたいですが、どちらにしても問題解決には、
- 問題や解決方法を洗い出す
- 問題を1つずつ解決していく
ということを繰り返して、粘り強い作業が必要になります。
初学者のうち、大抵のエラーはエラーログをそのままググっても、同じようなエラーで詰まっている人が、分かりやすい解決記事を書いてくれています。
その記事を参考にすれば解決できるはずです。
エラーが出ても諦めることなく、開発にチャレンジしていきましょう。