首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

PHP 連接 MySQL 失敗排查:端口配置與宿主權限詳解

     編輯:程式設計綜合問答

現象

PHP `mysql_connect` 报錯,用戶名密碼正確、MySQL 服務已重啟,但仍無法連接。截圖顯示端口為 3307(非默認 3306)。

核心原因與解決

1. 端口未指定(最常見)

$conn = mysql_connect('127.0.0.1:3307', 'root', 'password'); // 必須顯式帶端口
// 或
$conn = mysqli_connect('127.0.0.1', 'root', 'password', 'dbname', 3307);

配置文件 `php.ini` 中 `mysqli.default_port=3307` 亦可生效。

2. 賬號宿主權限不匹配

MySQL 用戶 = `用戶名` + `宿主`。需確認 `root` 允許從 PHP 運行機器的 IP 連接:

mysql> SELECT host, user FROM mysql.user WHERE user='root';
+-----------+------+
| host      | user |
+-----------+------+
| localhost | root |
| 127.0.0.1 | root |
| ::1       | root |
| %         | root |  -- 允許任意宿主(生產環境慎用)
+-----------+------+
  • 若 PHP 運行在同機器,需有 `localhost` 或 `127.0.0.1`。
  • 若 PHP 在不同機器,需有該機器 IP 或 `%`。
  • 授權語句:GRANT ALL ON *.* TO 'root'@'192.168.1.%' IDENTIFIED BY 'pwd'; FLUSH PRIVILEGES;

3. 協議/驅動版本不匹配

  • MySQL 8.0+ 默認 `caching_sha2_password`,舊版 `mysql_*` / `mysqli` (PHP < 7.4) 不支持 → 改用 `mysql_native_password` 或升級 PHP/驅動。
  • 建議棄用 `mysql_*`(PHP 7.0 移除),統一使用 `mysqli` 或 `PDO_MySQL`。

4. 防火牆/安全組攔截

# Linux 檢查 3307 端口
netstat -antp | grep 3307
# 雲服務器需在控制台放行 3307 入站規則

排查清單(按順序)

  1. 驗證 IP:Port 連通性:`telnet 127.0.0.1 3307` / `nc -zv 127.0.0.1 3307`
  2. PHP 代碼顯式指定端口 3307
  3. 檢查 `mysql.user` 宿主權限
  4. 確認密碼插件兼容性(`SHOW VARIABLES LIKE 'default_authentication_plugin';`)
  5. 查看 MySQL 錯誤日誌:`/var/log/mysql/error.log`
  6. 檢查 `bind-address` 配置(`/etc/my.cnf`)是否綁定 0.0.0.0 或具體 IP

最佳實踐

$mysqli = new mysqli('127.0.0.1', 'root', 'password', 'dbname', 3307);
if ($mysqli->connect_errno) {
    error_log("MySQL 連接失敗: " . $mysqli->connect_error);
    die("服務暫時不可用");
}
$mysqli->set_charset("utf8mb4");

使用 `PDO` 更通用:

$dsn = "mysql:host=127.0.0.1;port=3307;dbname=dbname;charset=utf8mb4";
$pdo = new PDO($dsn, 'root', 'password', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false
]);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved