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番ポートを使っているプロセスを特定する
コマンドプロンプトで確認する(推奨)
- スタートメニューを右クリックし、「ターミナル(管理者)」または「コマンドプロンプト(管理者)」を選択する
- 以下のコマンドを入力してEnterを押す
netstat -ano | findstr :3306
- 出力結果の右端に表示される数字がPID(プロセスID)
例:
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 5432
この場合、PIDは「5432」。
- 続けて以下のコマンドでプロセス名を確認する
tasklist /FI "PID eq 5432"
mysqld.exe や mysqld と表示された場合は、別のMySQLインスタンスが動いています。
XAMPPコントロールパネルのNetstatで確認する方法
コマンドプロンプトが苦手な場合は、XAMPPコントロールパネル右上の「Netstat」ボタンをクリックします。
表示された一覧の中に「3306」が含まれている行があれば、そのポートは使用中です。
手順②:競合しているプロセスを止める
特定したPIDのプロセスを終了させます。
- Ctrl + Shift + Esc でタスクマネージャーを開く
- 「詳細」タブをクリックする(「詳細情報」と表示されている場合もある)
- PIDの列で先ほどの番号を探す
- 該当行を右クリックし「タスクの終了」を選択する
プロセスを終了したら、XAMPPのコントロールパネルに戻り、MySQLの「Start」ボタンを押して起動を確認します。
Windowsサービスとして登録されている場合
mysqld.exe がサービスとして登録されていると、タスクを終了してもすぐに再起動されることがあります。
その場合は以下の手順でサービスを停止します。
- Win + R を押し「services.msc」と入力してEnterを押す
- 一覧の中から「MySQL」「MySQL80」「MariaDB」などのサービスを探す
- 右クリックして「停止」を選択する
不要なサービスであれば、スタートアップの種類を「手動」に変更しておくと、次回のPC起動時に自動で3306を取られることを防げます。
コマンドで停止する場合(管理者権限のコマンドプロンプト):
net stop MySQL80
サービス名は環境によって「MySQL80」「MySQL」「MariaDB」など異なるため、services.mscで正確な名前を確認してから実行してください。
手順③:XAMPPのMySQLポート番号を変更する(別解)
競合しているプロセスをどうしても止められない場合や、両方のMySQLを同時に使いたい場合は、XAMPPのMySQLが使うポート番号を変更します。
変更先として広く使われるのは3307番です(未使用であることを先にNetstatで確認してください)。
my.ini を編集する
- XAMPPコントロールパネルでMySQLの行にある「Config」ボタンをクリックする
- プルダウンメニューから「my.ini」を選択する
- ファイルがメモ帳などで開くので、
Ctrl + Fで「3306」を検索する [mysqld]セクションの下にある以下の行を見つける
port= 3306
- 「3306」を「3307」に書き換えて保存する
port= 3307
コントロールパネルの設定も変更する
my.ini を変更しただけでは不十分な場合があります。
コントロールパネル側にも以下の手順でポートを反映させます。
- XAMPPコントロールパネル上部の「Config」ボタンをクリックする
- 「Service and Port Settings」を選択する
- 「MySQL」タブをクリックする
- 「Main Port」の欄を「3306」から「3307」に変更する
- 「Save」ボタンを押して保存する
設定を保存したら、コントロールパネルを一度終了して再起動し、MySQLの「Start」ボタンを押します。
コントロールパネルのポート表示が「3307」に変わって緑色になれば成功です。
注意: ポートを変更した場合、phpMyAdminや自作アプリの接続設定にも3307を反映させる必要があります。phpMyAdminはXAMPPの
C:\xampp\phpMyAdmin\config.inc.php内の$cfg['Servers'][$i]['port']を変更してください。
管理者権限で起動していない場合
ポート競合が見当たらないのにMySQLが起動しない場合は、管理者権限の不足が原因のことがあります。
- XAMPPコントロールパネルのショートカットを右クリックする
- 「管理者として実行」を選択する
これだけで起動することがあります。
毎回手動で右クリックするのが面倒な場合は、ショートカットのプロパティ →「互換性」タブ→「管理者としてこのプログラムを実行する」にチェックを入れておくと便利です。
対処法のまとめ
| 状況 | 対処法 |
|---|---|
| 他のMySQLプロセスが3306を使用中 | タスクマネージャーまたはコマンドでプロセスを終了 |
| MySQLがWindowsサービスとして常駐 | services.mscまたはnet stopでサービスを停止 |
| プロセスを止められない・両立させたい | my.iniとコントロールパネルでポートを3307に変更 |
| 競合なし・それでも起動しない | 管理者権限でXAMPPを実行 |
まとめ
XAMPPのMySQLが起動しないときの最初の確認ポイントは、3306番ポートの競合です。netstat -ano | findstr :3306 コマンドで使用中のプロセスを特定し、そのプロセスを止めるか、XAMPPのポートを3307に変更することで大半のケースは解決できます。
それでも解決しない場合は、XAMPPを管理者権限で起動することも試してみてください。
XAMPPのApacheが起動しない場合の対処法については、関連記事もあわせてご参照ください。
参考情報源:
- Kinsta「How to fix the XAMPP error “MySQL shutdown unexpectedly”」 (2025年10月1日)
- Terresquall Blog「XAMPP MySQL not starting on Windows」 (2022年8月6日)
- 10web.io「MySQL Shutdown Unexpectedly: How to Solve the XAMPP MySQL Error」 (2024年8月16日)
- Medium – Ovindu Pathiraja「Solving XAMPP MySQL Port Conflict Error」 (2024年2月6日)

コメント