為什麼用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程序。