首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 服務正常但程序無法連接?localhost vs 127.0.0.1 的關鍵區別

     編輯:MySQL 資料庫相關知識

現象

Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource
Warning: mysql_errno(): supplied argument is not a valid MySQL-Link resource
Error: Can not connect to MySQL Server

服務器運行正常,PHP 代碼連接失敗。

解決方法

將連接配置中的 host=localhost 改為 host=127.0.0.1 即可連接。

根因分析

參數localhost127.0.0.1
協議Unix Socket (文件)TCP/IP (網絡)
Socket 文件/tmp/mysql.sock 或 /var/lib/mysql/mysql.sock不使用
常見問題Socket 文件路徑不匹配、權限不足、文件丟失繞過 Socket 層,直接走回環接口
MySQL 權限表匹配'user'@'localhost''user'@'127.0.0.1' 或 'user'@'%'

深度排查清單

  1. Socket 路徑一致性:my.cnf 中 [mysqld] 和 [client] 的 socket 參數必須一致。
  2. 權限表宿主:SELECT host, user FROM mysql.user; 確認是否有 'user'@'localhost',或改授權 'user'@'127.0.0.1' / 'user'@'%'。
  3. 跳過名字解析:my.cnf 添加 skip-name-resolve 禁用 DNS 反查,加速連接並避免解析失敗。
  4. 防火牆/SELinux:確保 3306 端口對本地回環放行。
  5. PHP mysqli/pdo_mysql:驅動默認行為可能不同,顯式指定 host=127.0.0.1 最穩妥。

最佳實踐

  • 應用配置統一使用 127.0.0.1,避免 Socket 依賴。
  • Docker/容器環境必須用 127.0.0.1 或容器名,Socket 掛載麻煩且易斷。
  • 監控腳本同樣建議用 TCP 連接檢測,更貼近應用真實路徑。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved