首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Mac OS 解決 localhost 無法連接 MySQL:Socket 與 TCP 協議差異深度解析

     編輯:MySQL 綜合教學

問題現象

Mac OS Lion 自帶 Apache/PHP,官網 DMG 安裝 MySQL。PHP 使用 localhost 連接失敗,改為 127.0.0.1 或本機 IP 即正常。Java/JDBC 使用 localhost 正常,命令行工具也正常。

根因:Socket vs TCP 協議差異

具體衝突分析

  1. PHP 默認配置(/etc/php.ini)三處 Socket 路徑指向 /var/mysql/mysql.sock:
    • mysql.default_socket
    • mysqli.default_socket
    • pdo_mysql.default_socket
  2. MySQL 實際運行 Socket 文件位於 /tmp/mysql.sock
  3. 查看方法:
    echo "show variables" | mysql | grep socket
    echo "status" | mysql | grep socket
    # 若有密碼:mysql -u用戶 -p密碼 -e "show variables" | grep socket
  4. PHP 讀取默認配置找不到 Socket 文件,報錯 No such file or directory

解決方案(二選一)

方案一:修改 PHP 配置(推薦)

; /etc/php.ini
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock
pdo_mysql.default_socket = /tmp/mysql.sock

修改後 重啟 Apache:sudo apachectl restart

方案二:修改 MySQL 配置

; /etc/my.cnf 或 /usr/local/mysql/my.cnf
[mysqld]
socket = /var/mysql/mysql.sock
[client]
socket = /var/mysql/mysql.sock

修改後 重啟 MySQL。

驗證

PHP 再次使用 localhost 連接 MySQL 成功。

核心知識點

  • localhost ≠ 127.0.0.1 在 MySQL 客戶端協議層面
  • PHP 默認用 Socket,Java/JDBC 默認用 TCP
  • Socket 文件路徑**客戶端與服務端必須一致**
  • Mac OS 系統自帶 PHP 與官方 MySQL 預設路徑不一致是常見坑
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
連接方式Host 值協議Socket 文件
Unix Socketlocalhost本地文件域套接字php.ini 配置路徑
TCP/IP127.0.0.1網絡回環接口無需 Socket 文件