45

MySQL主机127.0.0.1与localhost区别总结

 5 years ago
source link: http://database.51cto.com/art/201806/575745.htm?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

可能有很多朋友都会碰到一个问题不知道127.0.0.1与localhost有什么区别,但是有的时间会发现使用localhost连接不了,但是改成127.0.0.1即可了连接了,那么他们会有什么区别呢,下面我给大家介绍。

Evimyuu.jpg!web

  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;  
Currentuser: root@localhost  
SSL: Notin 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;  
Currentuser: root@localhost  
SSL: Notin use  
Current pager: stdout  
Using outfile: ''  
Using delimiter: ;  
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 

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK