一家之言: localhost與127.0.0.1的區別
localhost與127.0.0.1的區別是什嗎?相信有人會說是本地ip,曾有人說,用127.0.0.1比localhost好,可以減少一次解析。 看來這個入門問題還有人不清楚,其實這兩者是有區別的。 no1: localhost也叫local ,正確的解釋是:本機伺服器 127.0.0.1在windows等系統的正確解釋是:本機地址(本機伺服器) no2: localhot(local)是不經網卡傳輸!這點很重要,它不受網路防火牆和網卡相關的的限制。 127.0.0.1是通過網卡傳輸,依賴網卡,並受到網路防火牆和網卡相關的限制。
一般設定程式時本地服務用localhost是最好的,localhost不會解析成ip,也不會佔用網卡、網路資源。 有時候用localhost可以,但用127.0.0.1就不可以的情況就是在於此。猜想localhost訪問時,系統帶的本機目前使用者的許可權去訪問,而用ip的時候,等於本機是通過網路再去訪問本機,可能涉及到網路使用者的許可權。
他家之言: 1. mysql -h 127.0.0.1 的時候,使用TCP/IP串連, mysql server 認為該串連來自於127.0.0.1或者是”localhost.localdomain”
2. mysql -h localhost 的時候,是不使用TCP/IP串連的,而使用Unix socket; 此時,mysql server則認為該client是來自”localhost”
3. mysql許可權管理中的”localhost”有特定含義: —— MySQL手冊 5.6.4 ….. A Host value may be a hostname or an IP number, or ‘localhost’ to indicate the local host.
注意:雖然兩者串連方式有區別,但當localhost 為預設的127.0.0.1時,兩種串連方式使用的許可權記錄都是以下的1.row的記錄(因為記錄在前,先被匹配) *************************** 1. row *************************** Host: localhost User: root …… *************************** 2. row *************************** Host: 127.0.0.1 User: root
證明:
shell> mysql -h 127.0.0.1 mysql> status; Current user: root@127.0.0.1 SSL: Not in use Current pager: stdout Using outfile: ” Using delimiter: ; Server version: 5.1.33-log Source distribution Protocol version: 10 Connection: 127.0.0.1 via TCP/IP
shell> mysql -h locahost mysql> status; Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: ” Using delimiter: ; Server version: 5.1.33-log Source distribution Protocol version: 10 Connection: Localhost via UNIX socket
shell> mysql -h XXXX(ip) mysql> status; Current user: root@ip SSL: Not in use Current pager: stdout Using outfile: ” Using delimiter: ; Server version: 5.1.33-log Source distribution Protocol version: 10 Connection: XXXX(ip) via TCP/IP
原文:http://blog.sina.com.cn/s/blog_40e1ba640100ivjj.html