MySQL主机127.0.0.1与localhost区别总结

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: [email protected]
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: [email protected]
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

时间: 2024-09-30 07:57:00

MySQL主机127.0.0.1与localhost区别总结的相关文章

MySQL刚安装完仅仅认得的主机是:localhost和127.0.0.1

MySQL刚安装完仅仅认得的主机是:localhost和127.0.0.1,假设你要让你机上的IP能够正常登录有两种办法: 一是对你的IP   172.16.1.10   进行授权 grant   privileges   on   dbname.*   to   "user "@ "172.16.1.10   "   identified   by   "password "; 假设仅仅是你自己用的话就能够这样写 grant   all   o

MySQL刚安装完只认得的主机是:localhost和127.0.0.1

MySQL刚安装完只认得的主机是:localhost和127.0.0.1,如果你要让你机上的IP可以正常登录有两种办法: 一是对你的IP   172.16.1.10   进行授权 grant   privileges   on   dbname.*   to   "user "@ "172.16.1.10   "   identified   by   "password "; 如果只是你自己用的话就可以这样写 grant   all   on 

MySQL使用主机名(127.0.0.1)连接不了

最近遇到一个问题,连接MySQL的时候主机名用localhost可以,用127.0.0.1则不行.于是乎google了一番,总结下,以做备忘吧. 一. MySQL启动的配置 首先MySQL启动时会加载配置文件,即my.cnf文件.在这个文件中我们可以设置连接数据库的IP限制, 如下图 二.  MySQL验证连接的过程. 我们知道MySQL服务器是通过权限表来控制用户访问的,权限表放置在mysql数据库中,由mysql_install_db脚本初始化.这些MySQL权限表分别user,db,tab

(mysql+php+apache)127.0.0.1和localhost可以连接mysql服务器,而ip却不能

127.0.0.1和localhost可以连接mysql服务器,但是对应的ip却不能,并且报错: Can‘t connect to MySQL server  on  "10.0.73.25"(111) 可能是以下原因: 1.网络不通:ping 10.0.73.25  发现能ping通 ,排除此原因. 2.mysql配置问题:打开mysql的配置文件mysql.cnf(linux下的路径一般为/etc/mysql/mysql.cnf),产看skip-networking和bind_ad

localhost、127.0.0.1、本机IP、虚拟主机、kotlin

(问题起源于:tomcat发布的项目,用localhost和本机ip访问得到的结果不同.) 直接上链接: localhost.127.0.0.1.本机IP: https://www.zhihu.com/question/23940717#answer-5775920: 该链接中摘录一部分: localhost 是个域名,不是地址,它可以被配置为任意的 IP 地址,不过通常情况下都指向 127.0.0.1(ipv4)和 [::1](ipv6): 整个127.* 网段通常被用作 loopback 网

mysql -h localhost和mysql -h 127.0.0.1的区别

今天早上同事说MySQL root账号登录不上了.我试了一下 #mysql -u root -p 提示”Access denied for user ‘root’@’localhost’ (using password: YES)” 因为年后有同事离职,我第一反应是谁修改了root密码?按照忘记root密码来重置一下密码: #/etc/init.d/mysql stop #mysqld_safe –skip-grant-tables & #mysql -uroot -p mysql>upda

[日常] 解决mysql localhost可以连接但是127.0.0.1不能连接

在测试mysql的过程中遇到使用localhost可以连接但是127.0.0.1不能连接,原因是localhost使用的本地socket连接,127.0.0.1使用使用的tcp连接 在mysql库的user表中,root账号默认的加密验证方式是auth_socket是,从新使用新的方式生成一下密码加密就可以了 可以更改下用户的加密方式:update user set authentication_string=password("123456"),plugin='mysql_nativ

Windows 主机中localhost与127.0.0.1的区别

相信有人会说是本地IP,曾有人说,用127.0.0.1比localhost好,可以减少一次解析. 这个理解是错误的,其实这两者是有区别的. localhost也叫local ,正确的解释是:本地服务器 127.0.0.1在windows系统的正确解释是:本机地址(本机服务器) localhot(local)是不经网卡传输!这点很重要,它不受网络防火墙和网卡相关的的限制. 127.0.0.1是通过网卡传输,依赖网卡,并受到网络防火墙和网卡相关的限制. 一般设置程序时本地服务用localhost是最

127.0.0.1与localhost与ip的区别

127.0.0.1与localhost与ip的区别 May 18, 2014 localhost 不联网不使用网卡,不受防火墙和网卡限制本机访问 一般使用 本地套接字文件AF_UNIX 应用程序一般约定使用localhost时优先查本地套接字连接. mysqlclient 与 mysqlserver 就是这样的约定 127.0.0.1 不联网网卡传输,受防火墙和网卡限制本机访问 127.0.0.1 是主机IP堆栈内部的IP地址..在windows/unix IP协议栈内部发现要发网的ip地址是1