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:           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 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

保存重启MySQL,问题解决!

时间: 2024-11-01 04:25:25

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

mysql安装后用netstat -an怎么没有localhost或者127.0.0.1

问题描述 mysql安装后用netstat -an怎么没有localhost或者127.0.0.1 mysql安装后用netstat -an怎么没有localhost或者127.0.0.1,安装的时候改了端口号 补充:我是在虚拟机下面安装的 解决方案 android:failed to connect to localhost/127.0.0.1Error : call to localhost/127.0.0.1:9000 failed on connection exception : ja

刚下的mysql 无论127.0.0.01还是localhost都连接不上是什么情况?

问题描述 刚下的mysql 无论127.0.0.01还是localhost都连接不上是什么情况? 刚下的mysql 无论127.0.0.01还是localhost都连接不上是什么情况? 求教 解决方案 说错,127.0.0.1 解决方案二: 楼主可以试一下127.0.0.1 你多了个0哦亲 解决方案三: 去service配置里面看看localhost配置信息 解决方案四: service服务没开? 解决方案五: 我是从U盘里直接(#‵′)拷的别人的可以用么,配置里面没有localhost信息 解

php mysql localhost,127.0.0.1和ip区别_Mysql

一家之言: 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)是不经网卡传输!这点很重要,它不受网络防火墙和网卡相

MySQL利用localhost无法连接问题解决办法(127.0.0.1能连接)

  安装后使用探针进行PHPINFO测试的时候.发现默认的localhost不能连接MariaDB数据库,但是通过127.0.0.1又可以连接.表示很郁闷.最初想到的是:是不是linux服务器上的hosts文件问题. 于是就 echo "127.0.0.1 localhost">>/etc/hosts && sync 结果还是一样,localhost无法连接127.0.0.1可以连接. 在网上看到有朋友说是selinux的问题,但,一般系统安装好了后我都是已

MySQL不能通过localhost或127.0.0.1连接数据库

MySQL通过localhost无法连接数据库的解决 问题:一台服务器的PHP程序通过localhost地址无法连接数据库,但是如果设置为127.0.0.1则可以正常连接,连接其他数据库服务器也正常.MySQL的权限设置正确,且通过mysql命令行客户端可以正常连接数据库. 分析:这是典型的socket没有正确设置的情况. 连接MySQL数据库有两种方式:TCP/IP(一般理解的端口的那种)和Unix套接字(一般叫socket或者sock).大部分情况下,可以用localhost代表本机127.

php-使用wampsever时localhost打不开而127.0.0.1可以正常访问,怎么解决?

问题描述 使用wampsever时localhost打不开而127.0.0.1可以正常访问,怎么解决? T^T试了所有的方法,改过apache中conf文件的端口没用又改回了80,而且IIS在进程中没有开启,且关闭了在控制面板-添加删除程序-添加windows组件中的Internet服务.localhost还是会显示IIS的图,实在不知道怎么好了,打开127.0.0.1的时候是可以正常访问的.下面的是图片,刚开始学web技术,还请各位多多指教!~T^T好急的!! ! 后续:图片说明 刚才测试了一

mysql_connect localhost和127.0.0.1的区别(网络层阐述)_php技巧

connects.php 复制代码 代码如下: mysql_connect('127.0.0.1','root','zzzizzz1'); mysql_connect('localhost','root','zzzizzz1'); 使用strace获取系统调用: 复制代码 代码如下: strace php connects.php 2>&1 | grep connect #127.0.0.1 -> internet socket connect(3, {sa_family=AF_INE

python连接mysql错误:Cant connect to MySQL server on 127.0.0.1

python做了一个程序,需要频繁读取数据并写入数据. 运行了几天后发现每次运行几个小时后都会出现mysql链接错误,关键错误信息如下: 2003, "Can't connect to MySQL server on '127.0.0.1' (10048) 看了一些资料,mysql的10048错误是因为端口不够用,不能建立新的链接!问题是原来的链接我已经关闭了啊!最关键的在于:关闭的链接,其端口不是立即可用的,windows默认的端口周期是240秒. 解决办法,从两方面下手: 1.增加可用端口

Host '127.0.0.1' is not allowed to connect to this MySQL server

错误:Host  '127.0.0.1'  is  not  allowed  to  connect  to  this  MySQL  server 一般原因: MySQL数据库的配置文件my.ini中设置了参数: skip-name-resolve        从而导致使用"localhost"不能连接到数据库. 解决方法: 注释掉: #skip-name-resolve     注释掉对数据库的设置略有影响,但影响不大.