CentOS 6.3 編譯安裝 MariaDB 後,PHP 探針測試:localhost 連線失敗,127.0.0.1 卻正常。
localhost 在 MySQL 客戶端協定中預設使用 **Unix Domain Socket** 連線。127.0.0.1 則強制使用 **TCP/IP** 連線(port 3306)。/usr/local/mysql/tmp/mysql.sock。/var/run/mysqld/mysqld.sock(或 /tmp/mysql.sock),兩者不一致導致 localhost 找不到 socket 而連線失敗。mysql_config --socket
# 或
SHOW VARIABLES LIKE 'socket';
假設輸出 /usr/local/mysql/tmp/mysql.sock。
找到 php.ini(php --ini 查看),在 [MySQL]、[mysqli]、[pdo_mysql] 區段分別設定:
mysql.default_socket = /usr/local/mysql/tmp/mysql.sock
mysqli.default_socket = /usr/local/mysql/tmp/mysql.sock
pdo_mysql.default_socket = /usr/local/mysql/tmp/mysql.sock
systemctl reload php-fpm
# 或
systemctl restart httpd
ln -s /usr/local/mysql/tmp/mysql.sock /var/run/mysqld/mysqld.sock
# 或
ln -s /usr/local/mysql/tmp/mysql.sock /tmp/mysql.sock
需確保目錄存在且權限正確(mysql:mysql)。
php -r "new PDO('mysql:host=localhost;dbname=test', 'user', 'pass'); echo 'OK';"
/etc/hosts 已含 127.0.0.1 localhost 仍失效,說明非 DNS/主機名解析問題。