在測試 PHP 連接 MySQL 時,雖然命令列下使用 mysql -u root -p 可以正常登入資料庫,但執行 PHP 腳本卻報錯:
Can't connect to local MySQL server through socket '/tmp/mysql.sock'
測試用的 PHP 程式碼如下:
<?php
$link = mysql_connect('localhost', 'root', 'zz') or die(mysql_error());
mysql_select_db('test') or die('no db');
mysql_query('SET NAMES utf8');
echo 99;
?>
這個錯誤通常是因為 PHP 嘗試通過 Unix Socket 文件 /tmp/mysql.sock 連接 MySQL,但該 Socket 文件不存在、路徑不匹配,或是權限不足導致無法讀寫。
通過調整 MySQL 相關目錄的擁有者與權限,確保 Socket 文件能被正確建立與存取。具體執行以下指令(請根據實際安裝路徑調整):
chown -R root /usr/local/mysql
chgrp -R mysql /usr/local/mysql
chown -R root /usr/local/mysql/bin
chgrp -R mysql /usr/local/mysql/bin
chgrp -R mysql /var/lib/mysql
chmod 777 /var/lib/mysql
chown -R root /var/lib/mysql/mysql
chgrp -R mysql /var/lib/mysql/mysql
chmod 777 /var/lib/mysql/mysql
chown -R root /var/lib/mysql/mysql/*
chgrp -R mysql /var/lib/mysql/mysql/*
chmod 777 /var/lib/mysql/mysql/*
chmod 777 /usr/local/mysql/lib/mysql/libmysqlclient.a
my.cnf 中的 socket 參數是否與 PHP 設定一致。127.0.0.1 代替 localhost,強制使用 TCP/IP 連接而非 Socket。