用localhost不能連上mysql,但用127.0.0.1卻可以,是什麼原因?
localhost 是走 socket 127.0.0.1 是走 3306端口
http://www.jeepshoe.org/651195202.htm
使用localhost連接失敗的原因為在socket的方式下,php默認配置的mysql服務的socket文件不存在,所以導致連接失敗,如果把連接失敗的錯誤信息dump出來,你應該會看到錯誤信息中包含了“No such file or directory”。
------------------轉自:http://my.oschina.net/fhd/blog/500778----------------------------
localhost也叫local ,正確的解釋是:本地服務器。127.0.0.1在windows等系統的正確解釋是:本機地址(本機服務器),他們的解析通過本機的host文件,windows自動將localhost解析為127.0.0.1。localhot(local)是不經網卡傳輸!這點很重要,它不受網絡防火牆和網卡相關的的限制。127.0.0.1是通過網卡傳輸,依賴網卡,並受到網絡防火牆和網卡相關的限制。一般設置程序時本地服務用localhost是最好的,localhost不會解析成ip,也不會佔用網卡、網絡資源,防火牆對其不起作用,端口全開放。有時候用localhost可以,但用127.0.0.1就不可以的情況就是在於此。猜想localhost訪問時,系統帶的本機當前用戶的權限去訪問,而用ip的時候,等於本機是通過網絡再去訪問本機,可能涉及到網絡用戶的權限。
localhost 127.0.0.1本機IP網絡 不聯網不聯網聯網傳輸不使用網卡,不受防火牆限制 網卡傳輸,受防火牆和網卡限制 網卡傳輸,受防火牆和網卡限制訪問本機訪問本機訪問本機或外部訪問
-----------------------over---------------------------------------------------
http://yubosun.akhtm.com/tech/mysql-localhost.htm
分析:這是典型的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進程。
閱讀更多 程序員小新人學習 的文章