程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL主機127.0.0.1與localhost區別總結,mysqllocalhost

MySQL主機127.0.0.1與localhost區別總結,mysqllocalhost

編輯:MySQL綜合教程

MySQL主機127.0.0.1與localhost區別總結,mysqllocalhost


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"有特定含義:

注意:雖然兩者連接方式有區別,但當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@localhost
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 locahostmysql> status;
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimi(www.111cn.net)ter: ;
Server version: 5.1.33-log Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket

發現問題
昨天在幫同事編譯安裝Linux環境時,遇到一個問題:

WEB服務器是apache,數據庫是MySQL。

於是寫了一個測試連接數據庫的PHP頁面:

代碼如下 復制代碼
$mysql = mysql_connect('localhost','root','');

打開 http://localhost/test.php 測試

提示:Can’t connect to local MySQL server through socket...

檢查環境正常
以為是數據庫沒有啟動,於是查看一下進程,MySQL在進程裡,重啟了一下MySQL.

使用mysql -u root -p 可以進入MySQL操作界面

直接使用/usr/local/php5/bin/php /web/test.php執行可以連上數據庫

apache也重啟了,一樣無效

疑點:為何網頁執行失敗,命令執行卻成功
這下就郁悶了,使用php命令直接執行就成功,通過網頁執行就失敗。難道是apache導致?網上搜索了大堆資料也沒找到解決方案,重新編譯安裝apache問題依舊。

把localhost改成127.0.0.1成功
把localhost改成127.0.0.1後竟然連接成功了,開始陷入思考困局:localhost失敗127.0.0.1卻成功?

ping localhost 地址是127.0.0.1沒錯

打開hosts加入

代碼如下 復制代碼
127.0.0.1 qttc

使用qttc當主機連接也正常,唯獨就不認localhost。

localhost連接方式不同導致
為了了解PHP連接數據庫時,主機填寫localhost與其它的區別閱讀了大量資料,最後得知:

當主機填寫為localhost時mysql會采用 unix domain socket連接

當主機填寫為127.0.0.1時mysql會采用tcp方式連接

這是linux套接字網絡的特性,win平台不會有這個問題

解決方法
在my.cnf的[mysql]區段裡添加

代碼如下 復制代碼
protocol=tcp

保存重啟MySQL,問題解決!
轉載注明來源:http://www.111cn.net/database/mysql/45518.htm


數據庫連接問題 127001與localhost有什不同?

你 hosts 文件沒有定義

[C:\WINDOWS\system32\drivers\etc]type hosts

# Copyright (c) 1993-1999 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host

127.0.0.1 localhost

[C:\WINDOWS\system32\drivers\etc]
 

localhost與127001測試時打開的網頁不一樣

打開的是什麼??

是你機子上別的網址還是?
你在運行輸入 CMD
然後 Ping localhost

看看出現的IP地址是多少

localhost 代表的是本地的意思
一般來說 代表IP地址的話就是127.0.0.1
也就是說 我 ping 127.0.0.1 == ping localhost

127.0.0.1是代表自己機器的回路地址,無論是否聯網,自己機器都是127.0.0.1,127段是保留區段。

localhost與127.0.0.1的關系:
localhost可以看成主機名,127--可以看成主機ip,中間曾在一個主機名到ip地址的映射!
如果你在mysql中連接數據庫,要用localhost而不能用127.0.0.1。因為mysql中對於用戶的登陸位置是有限定的,具體見mysql數據庫(database名字就是mysql)裡面的user表,裡面存放的ip和存放的域名是不一樣的,mysql進行匹配時不會自動將ip轉換成域名的。你授權一個用戶從這個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" 。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved