macOS 升級(如 10.10 Yosemite)後,PHP 連接 MySQL 报錯:
No such file or directory - /tmp/mysql.sock
原因:**PHP/MySQL 客戶端默認尋找 /tmp/mysql.sock,但 macOS(或 Homebrew/MySQL 官方包)實際將 Socket 放在 /var/run/mysqld/mysqld.sock 或 /tmp/mysql.sock 不存在**。
my.cnf 中 [mysqld] socket=... 創建 Socket 文件。/tmp/mysql.sock)。# 確認實際 Socket 位置
ls -l /var/run/mysqld/mysqld.sock
# 或
mysql_config --socket
# 創建鏈接指向 PHP 預期路徑
sudo ln -sf /var/run/mysqld/mysqld.sock /tmp/mysql.sock
優點: 即時生效,無需修改 PHP 代碼或配置,適用所有客戶端工具。
缺點: 重啟後 /tmp 可能被清理,需加入啟動腳本或使用方案二。
編輯 php.ini(php --ini 查看路徑):
[Pdo_mysql]
pdo_mysql.default_socket = /var/run/mysqld/mysqld.sock
[MySQLi]
mysqli.default_socket = /var/run/mysqld/mysqld.sock
重啟 PHP-FPM/Apache 生效。
編輯 /etc/my.cnf 或 /usr/local/etc/my.cnf:
[client]
socket = /tmp/mysql.sock
[mysqld]
socket = /tmp/mysql.sock
重啟 MySQL 服務。風險: /tmp 臨時目錄可能被系統清理,生產環境建議指定持久目錄(如 /var/lib/mysql/mysql.sock)並同步修改 PHP 配置。
$pdo = new PDO("mysql:host=localhost;dbname=test;unix_socket=/var/run/mysqld/mysqld.sock", 'user', 'pass');
php -r "new PDO('mysql:host=localhost;dbname=mysql', 'root', ''); echo 'OK';"
/tmp/mysql.sock 或 /opt/homebrew/var/mysql/mysql.sock (M1 晶片)。_www)有讀寫 Socket 目錄權限。**「軟鏈接應急 + php.ini 顯式指定持久化」** 是 macOS 開發環境的黃金組合,升級系統後只需檢查鏈接是否存活即可。