XAMPP(Apache + MariaDB/MySQL + PHP + phpMyAdmin)はローカル開発の定番ですが、起動できない / つながらない系のトラブルは誰でもハマります。
本記事は Windows + XAMPP 8.2.12(PHP 8.2.12) を前提に、再現率の高いエラーを原因 → 確認 → 解決のワンセットでまとめました。
安全のためのバックアップ/権限/ポート管理も網羅しています。
- 動作想定:Windows 10/11 + XAMPP 8.2.12(Apache 2.4系 / MariaDB 10.x / PHP 8.2)
- 記事のゴール:数分で原因に辿り着き、最短で直す
[TOC]
🧰 まず最初に:万能チェックリスト
:: ① ポート占有
netstat -ano | findstr :80
netstat -ano | findstr :443
netstat -ano | findstr :3306
tasklist /FI "PID eq <PID>"
:: ② サービスの存在/状態
sc query type= service state= all | findstr /I "apache mysql"
:: ③ Apache設定構文チェック(管理者で)
cd C:\xampp\apache\bin
httpd.exe -t
:: ④ MySQL接続チェック
cd C:\xampp\mysql\bin
mysql -u root -p -e "SELECT VERSION();"
:: ⑤ ログを即開く
notepad C:\xampp\apache\logs\error.log
notepad C:\xampp\mysql\data\mysql_error.log
⚠️ 必ず XAMPP Control Panel を「管理者として実行」。
💾 重要データは C:\xampp\mysql\data を丸ごとバックアップ。
A. Apache 起動エラー 🛑
メッセージ/症状 | 主原因 | 確認 | 解決 | |
---|---|---|---|---|
Apache shutdown unexpectedly. 直後に停止 |
80 / 443 のポート競合(IIS/Skype/Teams/VMware/他Webサーバ) |
`netstat -ano | findstr :80 :443` | 競合プロセスを停止(taskkill /PID <pid> /F )。必須なら ポート変更:httpd.conf の Listen 8080 / ServerName localhost:8080 、httpd-ssl.conf の Listen 4433 。XAMPPの Service and Port Settings も合わせる。 |
(OS 10048) Only one usage… | Listen の重複/衝突 | httpd.exe -t |
Listen の二重定義を削除。 |
|
AH00558: Could not reliably determine the server's FQDN |
ServerName 未設定 |
httpd.conf |
ServerName localhost:80 (ポート変更時は合わせる)。 |
|
The requested URL /phpmyadmin/ was not found | Alias 無効/パス変更 | conf\extra\httpd-xampp.conf |
Alias /phpmyadmin "C:/xampp/phpMyAdmin/" を有効にし再起動。 |
|
Forbidden 403 /phpmyadmin/ | ディレクトリ制限(リモート拒否) | httpd-xampp.conf |
<Directory "C:/xampp/phpMyAdmin"> の Require local を必要に応じて Require ip 192.168.0.0/16 などへ(※外部公開は非推奨)。 |
|
VCRUNTIME140.dll / MSVCP140.dll が見つかりません | VC++ ランタイム未導入 | ー | MS VC++ 再頒布パッケージ(x86/x64)をインストール。 | |
1060: 指定サービスは存在しません (sc query apache ) |
サービス未登録 | sc query |
管理者で cd C:\xampp\apache\bin && httpd.exe -k install 。以後 net start Apache2.4 が使える。 |
💡 WordPress利用時にポート変更したら:
wp-config.php
にWP_HOME
/WP_SITEURL
を 8080 等へ合わせる。
B. MySQL(MariaDB)起動/接続エラー 🐬
メッセージ/症状 | 主原因 | 確認 | 解決 | |
---|---|---|---|---|
MySQL shutdown unexpectedly. | InnoDB破損/設定ミス/ポート競合/権限不足 |
mysql_error.log / netstat :3306
|
① 管理者で起動 ② 競合なら my.ini の [mysqld] port=3307 に変更(phpMyAdmin等も更新) ③ InnoDBエラー時は バックアップ後 ib_logfile0/1 削除、必要に応じ innodb_force_recovery=1..6 を一時追加 → 復旧後に削除。 |
|
The server quit without updating PID file |
my.ini 誤り / datadir不一致 |
ログのみ |
datadir のパス/権限/文字化けを修正。改行(CRLF)や全角パスにも注意。 |
|
Port 3306 in use by … | ポート競合 | `netstat -ano | findstr :3306` | 競合停止 or port=3307 へ。config.inc.php のポートも変更。 |
ERROR 2002/2003: 接続できない | サーバ停止/ポート違い/ファイアウォール | LISTEN有無 | MySQL起動、ポート統一、FWで 3306 を許可。 | |
ERROR 1045 (Access denied for user 'root'@'localhost') | 認証失敗/権限不備 | mysql -u root -p |
忘れたら 安全モード:--skip-grant-tables で起動 → ALTER USER 'root'@'localhost' IDENTIFIED BY '新PW'; FLUSH PRIVILEGES;
|
|
HY000/1130: Host 'localhost' is not allowed… |
ユーザー@ホスト 未定義/拒否 |
SELECT user,host FROM mysql.user; |
例:CREATE USER 'controluser'@'localhost' IDENTIFIED BY 'PW'; GRANT ALL PRIVILEGES ON *.* TO 'controluser'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
|
|
1060: 指定サービスは存在しません (sc query mysql ) |
サービス未登録 | sc query |
cd C:\xampp\mysql\bin && mysqld.exe --install MySQL --defaults-file="C:\xampp\mysql\bin\my.ini" && net start MySQL |
🛟 破損時の“安全復旧”テンプレ(最終手段)
-
C:\xampp\mysql\data
を data_old にリネーム → 新規 data 作成。 -
C:\xampp\mysql\backup
→ 新data
へコピー。 -
data_old
から 各DBフォルダ(mysql / performance_schema / phpmyadmin
以外)を新data
へ戻す。 - 必要なら
ibdata1
も戻す(※整合性要注意)。 - 起動し、ダンプ取得後に再構築を検討。
C. phpMyAdmin 接続エラー 🧩
メッセージ | 主原因 | 確認 | 解決 |
---|---|---|---|
mysqli::real_connect(): (HY000/2002) No connection could be made… | MySQL未起動/ポート不一致 | LISTEN/ポート | MySQL起動、config.inc.php のポートを実際に合わせる(例 3307 )。 |
#1045 Access denied for user 'root'@'localhost' | PW不一致/権限 | mysql -u root -p |
root PWをXAMPP側と一致、忘れたら安全モードでリセット(上記B参照)。 |
HY000/1130 Host 'localhost' is not allowed… |
controluser@localhost 無い/権限不足 |
SELECT user,host FROM mysql.user; |
controluser を作成し config.inc.php の controluser /controlpass と一致させる。動作確認だけなら一時的に user=root に。 |
The requested URL /phpmyadmin/ was not found | Alias 無効/パス変更 | httpd-xampp.conf |
Alias /phpmyadmin "C:/xampp/phpMyAdmin/" を有効化。 |
Forbidden 403 | ディレクトリ制限 | httpd-xampp.conf |
ローカルは Require local のまま。LANアクセスが必要なら Require ip 192.168.0.0/16 などを追加(公開は非推奨)。 |
Blowfish secret の警告(設定が必要) | 暗号化キー未設定 | config.inc.php |
$cfg['blowfish_secret'] = '32文字程度のランダム文字列'; を追記。 |
Call to undefined function mysqli | PHP拡張未ロード |
phpinfo() / php_error_log
|
php.ini の extension=mysqli を有効化、Apache再起動。 |
Unknown database 'xxx' | DB未作成 | ー |
CREATE DATABASE xxx; を作成し、config.inc.php または接続先を修正。 |
config.inc.php
の最小例(ローカル & cookie認証)
<?php
$i = 0;
$i++;
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = '3306'; // 変更時は実ポートに
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['blowfish_secret'] = 'put-your-32+chars-random-secret-here';
🔒 セキュリティTip:
auth_type = 'cookie'
を推奨(config
はPWをファイルに平文保存するため避ける)。
🔎 すぐ使える原因切り分けフロー(超短縮)
-
LISTENしてる? →
netstat :80 :443 :3306
- してない:起動/権限/設定/破損
- してる:ユーザー/ポート/URL不一致 を疑う
-
Apache →
httpd.exe -t
/error.log
-
MySQL →
mysql_error.log
/mysql -u root -p
で入れるか -
phpMyAdmin →
config.inc.php
のhost/port/auth_type/user
を実態と合わせる -
データ触る前に バックアップ!
🛡️ 予防のためのベストプラクティス(運用の型)
- ✅ XAMPPは常に「管理者として実行」
- ✅ 定期バックアップ:
C:\xampp\mysql\data
+mysqldump
(自動化推奨) - ✅ インストール前にポート確認:
80/443/3306
が空いてるか - ✅ 最新版の適用:バグ修正/脆弱性対応(Apache Friends 公式)
- ✅ 強力な root PW + phpMyAdminはローカルのみ(
Require local
) - ✅ ログ監視:
apache/error.log
とmysql_error.log
を定期チェック - ✅ 規模が増えるなら Docker化 でプロセス/ポートを分離し再現性UP
🧾 付録:設定変更時に直す場所まとめ
-
Apacheポート:
httpd.conf
(Listen
/ServerName
)、httpd-ssl.conf
(Listen 443
)
+ XAMPP「Service and Port Settings」 -
MySQLポート:
my.ini
([mysqld] port=
)+C:\xampp\phpMyAdmin\config.inc.php
(port
) -
phpMyAdminユーザー:
config.inc.php
のuser/password/controluser/controlpass
↔ MySQL側のユーザー@ホスト
をmysql.user
で一致させる
🏁 結論
XAMPP 8.2.12 での 起動×接続トラブルは、
①ポート → ②権限(管理者/UAC) → ③設定(conf/my.ini/config.inc.php) → ④ログ の順で 機械的に潰すと最短で直せます。
本記事の表と手順を手元のチートシートとして活用し、安定したローカル環境を運用してください ✨
📚 参考リンク
- Apache Friends(XAMPP 公式)
- XAMPP Community Forum
- Stack Overflow(個別エラー時の検索キーワード例:
"Apache shutdown unexpectedly"
,"HY000/1130"
,"The server quit without updating PID file"
)