XAMPPのMySQLが起動しない原因はポート競合?確認方法と3つの解決策

プログラミング・IT

XAMPPのコントロールパネルでMySQLの「Start」ボタンを押しても、すぐに止まってしまう——そんな経験はないでしょうか。
原因の多くはポート競合です。
この記事では、競合しているプロセスの特定方法から、ポートの解放・変更まで、手順を追って解説します。


スポンサーリンク

エラーメッセージで原因を確認する

MySQLが起動しないとき、XAMPPのコントロールパネルのログ欄に以下のようなメッセージが表示されます。

[mysql] Port 3306 in use by "Unable to open process"!
[mysql] MySQL WILL NOT start without the configured ports free!
[mysql] Error: MySQL shutdown unexpectedly.

「Port 3306 in use」という文言が見えたら、ポート競合が原因と判断できます。
MySQLはデフォルトで3306番ポートを使用しており、他のプロセスがそのポートを先に使っていると起動できません。


ポート競合が起きる主な原因

3306番ポートを奪ってしまう代表的なソフトウェア・状況は以下のとおりです。

  • 別途インストールしたMySQL / MariaDB(Windowsサービスとして常駐しているケースが多い)
  • 以前のXAMPPやWAMPの残存プロセス(アンインストール後もサービスが残ることがある)
  • Docker上で動かしているMySQLコンテナ
  • 管理者権限なしでXAMPPを起動している

手順①:3306番ポートを使っているプロセスを特定する

コマンドプロンプトで確認する(推奨)

  1. スタートメニューを右クリックし、「ターミナル(管理者)」または「コマンドプロンプト(管理者)」を選択する
  2. 以下のコマンドを入力してEnterを押す
netstat -ano | findstr :3306
  1. 出力結果の右端に表示される数字がPID(プロセスID)

例:

TCP    0.0.0.0:3306    0.0.0.0:0    LISTENING    5432

この場合、PIDは「5432」。

  1. 続けて以下のコマンドでプロセス名を確認する
tasklist /FI "PID eq 5432"

mysqld.exemysqld と表示された場合は、別のMySQLインスタンスが動いています。

XAMPPコントロールパネルのNetstatで確認する方法

コマンドプロンプトが苦手な場合は、XAMPPコントロールパネル右上の「Netstat」ボタンをクリックします。
表示された一覧の中に「3306」が含まれている行があれば、そのポートは使用中です。


手順②:競合しているプロセスを止める

特定したPIDのプロセスを終了させます。

  1. Ctrl + Shift + Esc でタスクマネージャーを開く
  2. 「詳細」タブをクリックする(「詳細情報」と表示されている場合もある)
  3. PIDの列で先ほどの番号を探す
  4. 該当行を右クリックし「タスクの終了」を選択する

プロセスを終了したら、XAMPPのコントロールパネルに戻り、MySQLの「Start」ボタンを押して起動を確認します。

Windowsサービスとして登録されている場合

mysqld.exe がサービスとして登録されていると、タスクを終了してもすぐに再起動されることがあります。
その場合は以下の手順でサービスを停止します。

  1. Win + R を押し「services.msc」と入力してEnterを押す
  2. 一覧の中から「MySQL」「MySQL80」「MariaDB」などのサービスを探す
  3. 右クリックして「停止」を選択する

不要なサービスであれば、スタートアップの種類を「手動」に変更しておくと、次回のPC起動時に自動で3306を取られることを防げます。

コマンドで停止する場合(管理者権限のコマンドプロンプト):

net stop MySQL80

サービス名は環境によって「MySQL80」「MySQL」「MariaDB」など異なるため、services.mscで正確な名前を確認してから実行してください。


手順③:XAMPPのMySQLポート番号を変更する(別解)

競合しているプロセスをどうしても止められない場合や、両方のMySQLを同時に使いたい場合は、XAMPPのMySQLが使うポート番号を変更します。
変更先として広く使われるのは3307番です(未使用であることを先にNetstatで確認してください)。

my.ini を編集する

  1. XAMPPコントロールパネルでMySQLの行にある「Config」ボタンをクリックする
  2. プルダウンメニューから「my.ini」を選択する
  3. ファイルがメモ帳などで開くので、Ctrl + F で「3306」を検索する
  4. [mysqld] セクションの下にある以下の行を見つける
port= 3306
  1. 「3306」を「3307」に書き換えて保存する
port= 3307

コントロールパネルの設定も変更する

my.ini を変更しただけでは不十分な場合があります。
コントロールパネル側にも以下の手順でポートを反映させます。

  1. XAMPPコントロールパネル上部の「Config」ボタンをクリックする
  2. Service and Port Settings」を選択する
  3. MySQL」タブをクリックする
  4. 「Main Port」の欄を「3306」から「3307」に変更する
  5. Save」ボタンを押して保存する

設定を保存したら、コントロールパネルを一度終了して再起動し、MySQLの「Start」ボタンを押します。
コントロールパネルのポート表示が「3307」に変わって緑色になれば成功です。

注意: ポートを変更した場合、phpMyAdminや自作アプリの接続設定にも3307を反映させる必要があります。phpMyAdminはXAMPPの C:\xampp\phpMyAdmin\config.inc.php 内の $cfg['Servers'][$i]['port'] を変更してください。


管理者権限で起動していない場合

ポート競合が見当たらないのにMySQLが起動しない場合は、管理者権限の不足が原因のことがあります。

  1. XAMPPコントロールパネルのショートカットを右クリックする
  2. 管理者として実行」を選択する

これだけで起動することがあります。
毎回手動で右クリックするのが面倒な場合は、ショートカットのプロパティ →「互換性」タブ→「管理者としてこのプログラムを実行する」にチェックを入れておくと便利です。


対処法のまとめ

状況対処法
他のMySQLプロセスが3306を使用中タスクマネージャーまたはコマンドでプロセスを終了
MySQLがWindowsサービスとして常駐services.mscまたはnet stopでサービスを停止
プロセスを止められない・両立させたいmy.iniとコントロールパネルでポートを3307に変更
競合なし・それでも起動しない管理者権限でXAMPPを実行

まとめ

XAMPPのMySQLが起動しないときの最初の確認ポイントは、3306番ポートの競合です。
netstat -ano | findstr :3306 コマンドで使用中のプロセスを特定し、そのプロセスを止めるか、XAMPPのポートを3307に変更することで大半のケースは解決できます。

それでも解決しない場合は、XAMPPを管理者権限で起動することも試してみてください。
XAMPPのApacheが起動しない場合の対処法については、関連記事もあわせてご参照ください。


参考情報源:

コメント

タイトルとURLをコピーしました