mysqli_connect(): (HY000/2002): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
先給出結論
此bug尚未找出解決方案,但我已使用了曲線救國的方案來救命
背景
- 用了阿里雲市場中提供的鏡像;
- 用
localhost
爲host
的話,php連接mysql時就會走socket
的方式而非TCP/IP
的方式。 - 鏡像中提供的可視化運維繫統(PHP),似乎指定了mysql socket的路徑爲:
/tmp/mysql.sock
;因此,若我改mysql
的配置socket
的話,則該可視化運維繫統不可用; - 該可視化運維繫統使用了
zend
的工具進行加密,無法修改;
調試過程
因此只能改自己PHP
的配置mysqli.default_socket
;
備註:經測試,用php_mysql
擴展的話,mysql.default_socket
修改成功,並能成功連接。
而修改mysqli.default_socket
的話,依然報上述的錯,也就是設置無效。
利用php_info
查看了一下mysqli的配置,結果如下:
MYSQLI_SOCKET /tmp/mysql.sock
mysqli.default_socket no value
這裏可以看出倆問題:
- 似乎設置好了MYSQLI_SOCKET
,但爲何未能設置成功mysqli.default_socket
?
- google了一下,別人都是說MYSQLI_SOCKET
會覆蓋mysqli.default_socket
,因此需要處理MYSQLI_SOCKET
不正確的問題;那在我這,爲何MYSQLI_SOCKET
沒有覆蓋mysqli.default_socket
?
最終結果
搞不定此socket的配置,只好換回用127.0.0.1
來走TCP/IP
。
備註:用127.0.0.1
的話,記得在mysql的配置文件my.cnf
中把skip-name-resolve
給註釋掉,否則會報以下這錯:
Host ‘127.0.0.1’ is not allowed to connect to this MySQL server