mysql_connect localhost和127.0.0.1的区别(网络层阐述)
mysql_connect('127.0.0.1','root','zzzizzz1');
mysql_connect('localhost','root','zzzizzz1');
strace php connects.php 2>&1 | grep connect
#127.0.0.1 -> internet socket
connect(3, {sa_family=AF_INET, sin_port=htons(3306), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
#localhost -> unix domain socket
connect(7, {sa_family=AF_FILE, path="/var/run/mysqld/mysqld.sock"}, 110) = 0
Socket原本是为网络通讯设计的,但后来在Socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。
虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:
不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。
这是因为,IPC机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。
UNIX Domain Socket也提供面向流和面向数据包两种API接口,类似于TCP和UDP,但是面向消息(UDP)的UNIX Domain Socket也是可靠的,消息既不会丢失也不会顺序错乱。
相关推荐
-
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: 原因
-
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服务
-
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
-
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 可释放已关闭连接并重
-
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 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表,覆盖,不行,估计是版本不
-
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 删除服
-
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)是不经网卡传输!这点很重要,它不受网络防火墙和网卡相
-
IPv6设置后如何解决MySQL无法连接localhost的问题
使用phpmyadmin或者navicat链接数据库时提示[客户端软件无法连接localhost] 经检查发现是IPV6地址监听了3306端口,而客户端软件不支持IPV6. 新开的系统或者配置过IPV6的操作系统,然后手动安装的MYSQL数据库或者护卫神安装的数据库会出现此问题,平常使用的破解版的一键包不会出现这个问提. 一般手动安装的数据库中没有bind-address = 0.0.0.0这个参数,护卫神的数据库中有这个函数,但是注释的!只需要添加或者去掉这个注释后,重启数据库即可! 然后使用
-
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.如果你是独立主机用户(拥有管理主机权限
-
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; 显示所有数据库:
-
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... 检查环境正常 以为是数据库没有启动,于是查看一下进
随机推荐
- Seraph 4.0版本以后的新的脚本示例
- Python中的作用域规则详解
- VMware Workstation如何创建加密虚拟机
- asp.net错误处理Application_Error事件示例
- MySQL中union和order by同时使用的实现方法
- 利用JS延迟加载百度分享代码,提高网页速度
- 简述jQuery Easyui一些用法
- 解决jquery中美元符号命名冲突问题
- 微信小程序左右滑动切换页面详解及实例代码
- 浅谈使用Rapidxml 库遇到的问题和分析过程(分享)
- Java新特性之Nashorn_动力节点Java学院整理
- MyBatis查询缓存实例详解
- php更改目录及子目录下所有的文件后缀的代码
- 解读C++编程中派生类的构成和创建
- Android Dialog中软键盘的显示与隐藏的示例
- 去掉vue 中的代码规范检测两种方法(Eslint验证)
- Android系统图片分享工具类
- 一种类似JAVA线程池的C++线程池实现方法
- Docker容器自启动的实现方法
- 去掉 IDEA 中 mybatis配置文件的局部背景颜色(图解)