#2002 (CR_CONNECTION_ERROR) 表示客戶端無法透過 Socket/TCP 連上 MySQL Server,常見於「服務未啟動」、「Socket 路徑錯誤」、「Host 解析異常」。
config.sample.inc.php 複製為 config.inc.php。config.inc.php:$cfg['Servers'][$i]['host'] = 'localhost'; // 改為
$cfg['Servers'][$i]['host'] = '127.0.0.1';
原理:localhost 觸發 Unix Socket 連線 (預設 /tmp/mysql.sock),127.0.0.1 強制走 TCP/IP 回環,繞過 Socket 找不到問題。
編輯 php.ini:
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock
pdo_mysql.default_socket = /tmp/mysql.sock
重啟 PHP-FPM/Apache 生效。需確認 MySQL 實際 Socket 檔位置 (SHOW VARIABLES LIKE 'socket';)。
net start mysql 確認服務運行。my.ini:bind-address = 127.0.0.1 (或 0.0.0.0),不可為 ::1 單獨 IPv6。telnet 127.0.0.1 3306 測試埠通達性。mysql -u root -p -h 127.0.0.1 # 命令列強制 TCP 連線測試
#2002 90% 以上由 localhost Socket 機制與實際 Socket 檔位置不符引起。改用 127.0.0.1 強制 TCP 連線是最穩健、跨平台一致的解法;若堅持 Socket,務必對齊 my.cnf、php.ini、config.inc.php 三處 Socket 路徑。