爲什麼用localhost連不上mysql,用127.0.0.1卻可以

用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進程。

為什麼用localhost連不上mysql,用127.0.0.1卻可以


分享到:


相關文章: