下面小編就為大家帶來一篇完美解決MySQL透過localhost無法連接資料庫的問題。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧
問題:一台伺服器的PHP程式透過localhost位址無法連接資料庫,但如果設定為127.0.0.1則可以正常連接,連接其他資料庫伺服器也正常。 MySQL的權限設定正確,且透過mysql命令列客戶端可以正常連接資料庫。
分析:這是典型的socket沒有正確設定的情況。
連接MySQL資料庫有兩種方式:TCP/IP(一般理解的連接埠的那種)和Unix套接字(一般叫做socket或sock) 。大部分情況下,可以用localhost代表本機127.0.0.1,但是在MySQL連線時,二者不可混用,而且MySQL中權限設定中localhost與127.0.0.1也是分開設定的。設定為127.0.0.1時,系統透過TCP/IP方式連接資料庫;當設定為localhost時,系統會以socket方式連接資料庫。
解決:首先要看本機MySQL的socket套接字檔案在哪裡,查看指令是:
mysqld --verbose --help | grep socket
輸出結果顯示套接字檔案的位置,例如:這台伺服器顯示的是
socket /var/run/mysqld/mysqld.sock
然後修改php的設定檔php.ini與之對應起來就好了。
找到這一項:
mysql.default_socket =
一般來說這一項都是空的,改成:
mysql.default_socket = /var/run/mysqld/mysqld.sock
這裡要寫上一步查詢到的文件,根據你的情況設定。至此php配置就修改好了,如果是CLI(命令列)方式或CGI方式的話,立即就生效,如果是FASTCGI方式,需要重啟一下fastcgi進程。
以上是詳解MySQL透過localhost無法連線資料庫的問題解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!