1. 程式人生 > >為什麼用localhost連不上mysql,用127.0.0.1卻可以

為什麼用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套接字檔案在哪裡,檢視命令是:

<span style="color:#455353"><span style="color:#333333"><span style="color:#000000">mysqld </span><span style="color:#666600">--</span><span style="color:#000000">verbose </span><span style="color:#666600">--</span><span style="color:#000000">help </span><span style="color:#666600">|</span><span style="color:#000000"> grep socket</span></span></span>

輸出結果顯示套接字檔案的位置,比如:這臺伺服器顯示的是

<span style="color:#455353"><span style="color:#333333"><span style="color:#000000">socket                                            </span><span style="color:#666600">/</span><span style="color:#000088">var</span><span style="color:#666600">/</span><span style="color:#000000">run</span><span style="color:#666600">/</span><span style="color:#000000">mysqld</span><span style="color:#666600">/</span><span style="color:#000000">mysqld</span><span style="color:#666600">.</span><span style="color:#000000">sock</span></span></span>

然後修改php的配置檔案php.ini與之對應起來就好了。

找到這一項:

<span style="color:#455353"><span style="color:#333333"><span style="color:#000000">mysql</span><span style="color:#666600">.</span><span style="color:#000000">default_socket </span><span style="color:#666600">=</span></span></span>

一般來說這一項都是空的,改成:

<span style="color:#455353"><span style="color:#333333"><span style="color:#000000">mysql</span><span style="color:#666600">.</span><span style="color:#000000">default_socket </span><span style="color:#666600">=</span> <span style="color:#008800">/var/</span><span style="color:#000000">run</span><span style="color:#666600">/</span><span style="color:#000000">mysqld</span><span style="color:#666600">/</span><span style="color:#000000">mysqld</span><span style="color:#666600">.</span><span style="color:#000000">sock</span></span></span>

這裡應寫上一步查詢到的檔案,根據你的情況設定。至此php配置就修改好了,如果是CLI(命令列)方式或者CGI方式的話,立即就生效,如果是FASTCGI方式,需要重啟一下fastcgi程序。