php mysql localhost,127.0.0.1和ip区别

一家之言:

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

(0)

相关推荐

  • mysql error 1130 hy000:Host'localhost'解决方案

    ERROR 1130 (HY000): Host 'localhost' is not allowed to connect to this MySQL server www.jb51.net 出现原因: mysql只有一个root用户,修改root密码后选了MD5,提交后,重新 登陆出现"Host 'localhost' is not allowed to connect to this MySQL server..." 尝试另一个mysql库中的user表,覆盖,不行,估计是版本不

  • mysql_connect localhost和127.0.0.1的区别(网络层阐述)

    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

  • MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 的原因分解决办法

    MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 的解决办法和原因 这两天下载了MySQL5.7.11进行安装,发现到了初次使用输入密码的时候,不管怎样都进不去,即使按照网上说的在mysqld 下面添加skip-grant-tables也是不行,后来研究了两天,终于找出原因和解决办法. 复制代码 代码如下: [mysqlld] skip-grant-tables: 原因

  • linux mysql忘记密码的多种解决或Access denied for user 'root'@'localhost'

    我的系统是ubuntu6.06,最近新装好的mysql在进入mysql工具时,总是有错误提示: # mysql -uroot -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 使用网上介绍的方法修改root用户的密码: # mysqladmin -uroot -p password 'newpassword' Enter password: m

  • Can't connect to MySQL server on 'localhost' (10048)问题解决方法

    解决Can't connect to MySQL server on 'localhost' (10048), 一般见于使用mysql的windows 2003服务器. 错误的出现的原因: 应用程序需要快速释放和创建新连接, 但是由于 TIME_WAIT 中存在的连接超过默认值,导致较低吞吐量. 解决方案: 和本错误密切相关的两个windows的注册表项:TcpTimedWaitDelay和MaxUserPort的值. TcpTimedWaitDelay 确定 TCP/IP 可释放已关闭连接并重

  • MySQL 可以用localhost 连接,但不能用IP连接的问题解决方法

    MySQL localhost 连接,但不能用IP连接问题解决方案 主要涉及到MySQL 可以用localhost 连接,但不能用IP连接的问题 方面的内容,对于MySQL 可以用localhost 连接,但不能用IP连接的问题 1.打开cmd窗口,进入MySQL安装的bin目录 2.执行命令登录数据库,之后会出现一行要你输入密码的 mysql -u root -p 3.执行以下命令分配新用户: grant all privileges on *.* to 'root'@'%' identifi

  • Can't connect to MySQL server on localhost (10061)解决方法

    首先检查MySQL 服务没有启动>如果没有启动,则要启动这个服务. 昨天,重起服务器后出现MySQL 'localhost' (10061)错误,开始以为是因为数据库链接打开过多,数据库资源耗尽的缘故,但是重启服务器以后,仍旧出现问题,于是在网上查找解决方法.大体如下: 解决办法: 第一步 删除c:\windows\下面的my.ini 第二步 打开c:\mysql\bin\winmysqladmin.exe 输入用户名 和密码 第三步 在dos下 输入 mysqld-nt -remove 删除服

  • IPv6设置后如何解决MySQL无法连接localhost的问题

    使用phpmyadmin或者navicat链接数据库时提示[客户端软件无法连接localhost] 经检查发现是IPV6地址监听了3306端口,而客户端软件不支持IPV6. 新开的系统或者配置过IPV6的操作系统,然后手动安装的MYSQL数据库或者护卫神安装的数据库会出现此问题,平常使用的破解版的一键包不会出现这个问提. 一般手动安装的数据库中没有bind-address = 0.0.0.0这个参数,护卫神的数据库中有这个函数,但是注释的!只需要添加或者去掉这个注释后,重启数据库即可! 然后使用

  • Mac os 解决无法使用localhost连接mysql问题

    今天在mac上搭建好了php的环境,把先前在window.linux下运行良好的程序放在mac上,居然出现访问不了数据库,数据库连接的host用的是localhost,可以确认数据库配置是正确的,因为在java中使用localhost访问正常,另外通过命令行工具也能正常访问.当把localhost换成127.0.0.1或者本机的IP时,居然正常了.以前一直认为localhost与127.0.0.1是一回事,现在事实证明它们其中还是有区别的. 在网上搜索了一下它们的区别,有人已经说的很明白了,具体

  • mysql Access denied for user ‘root’@’localhost’ (using password: YES)解决方法

    今天在启动mysql时出现以下问题: [root@www ~]# mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 网上的答案是各种各样的,最终解决问题的方法总结为以下,好多都是没有设置初始密码造成此问题的. 解决方法如下: [root@www ~]# service mysqld stop #先关闭mysql服务

  • php运行提示Can't connect to MySQL server on 'localhost'的解决方法

    错误编号:2003 问题分析: 无法连接到 MySQL 服务器,可能的情况为: 1.MySQL 服务没有启动,一般是在异常的情况下 MySQL 无法启动导致的,比如无可用的磁盘空间,my.ini 里 MySQL 的 basedir 路径设置错误等: 2.MySQL 服务器资源紧张,导致无法连接. 解决方法: 1.如果你是虚拟主机用户(购买的空间),则联系空间商检查 MySQL 是否正常启动,并确认 MySQL 的配置信息(是否为 localhost): 2.如果你是独立主机用户(拥有管理主机权限

  • PHP中使用localhost连接Mysql不成功的解决方法

    发现问题 昨天在帮同事编译安装Linux环境时,遇到一个问题: WEB服务器是apache,数据库是MySQL. 于是写了一个测试连接数据库的PHP页面: 复制代码 代码如下: $mysql = mysql_connect('localhost','root',''); 打开 http://localhost/test.php 测试 提示:Can't connect to local MySQL server through socket... 检查环境正常 以为是数据库没有启动,于是查看一下进

  • mysql ERROR 1044 (42000): Access denied for user ''@'localhost' to database

    1. 问题描述: 在MySQL控制台下创建数据库出现以下信息: mysql> CREATE DATABASE python; ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'python' 2. 解决方法: 执行以下命令进入控制台: mysql --user=root -p 输入root用户的密码即可进入mysql控制台: 创建数据库: create database python; 显示所有数据库:

随机推荐