在安装网站的时候碰到 数据库服务器连接错误:1045Access denied for user ”@’localhost’ (using password: NO)的问题,查了很多资料,都是改密码,刷新权限之类。看看以下的设置或许你会发现新的问题哦!
在使用mysql的过程中,可能很多朋友都会遇到一个问题:127.0.0.1和localhost是一样的吗?但是有时候你会发现,使用localhost连接不上,而换成127.0.0.1之后又可以正常连接了;如果不一样,那它们之间到底有什么样的区别?下面小编给大家讲解一下。

mysql -h 127.0.0.1的时候,使用的是TCP/IP连接,此时,mysql server会认为,该连接来自于127.0.0.1或者是”localhost.localdomain”

mysql -h localhost的时候,使用的是Unix socket,而不是TCP/IP连接,所以这个时候,mysql server则会认为该client是来自”localhost”

mysql权限管理中的”localhost”有特定含义:

注:虽然前面两者存在着连接方式上的区别,但是当localhost为默认的127.0.0.1的时候,两种连接方式所使用的权限记录都是下图中1.row的记录,因为记录在前,所以会先被匹配。

MySql主机127.0.0.1与localhost有什么区别?
MySql主机127.0.0.1与localhost有什么区别?
之前在搭建安装Linux环境时,出现了一个问题,服务器是apache,数据库是mysql,写了一段php连接数据库的测试代码的页面,代码如下:

$mysql = mysql_connect(‘localhost’,’root’,”);

MySql主机127.0.0.1与localhost有什么区别?
浏览器中输入http://localhost/ceshi.php进行测试时报错,提示:Can’t connect to local MySQL server through socket…

MySql主机127.0.0.1与localhost有什么区别?
通过检查,服务器环境一切正常,就怀疑是不是数据库没有启动的原因?而查看进程,mysql也在进程里的,于是重启了mysql服务。

–通过mysql -u root -p 可以正常进入MySQL操作界面;

–直接使用/usr/local/php5/bin/php /web/ceshi.php又可以正常连接数据库;

–重启了apache,依然无效。

于是就有些蒙圈了,直接通过命令可以执行ceshi.php,而通过浏览器就会执行失败,无奈百度了很多资料,未能找到解决方案,于是重装apache,但是,问题依然未能解决。

MySql主机127.0.0.1与localhost有什么区别?
当然,遇到了问题解决不了是不会罢休的,于是又进行了各种尝试,后来,尝试到了将localhost改成127.0.0.1后,竟然连接成功了,而此时并不知道ocalhost和127.0.0.1是有区别的,所以一时陷入思考困局。

–ping localhost 地址是127.0.0.1没错;

–打开hosts,加入127.0.0.1 qttc,使用qttc当主机也能正常连接,唯独就不认localhost

为了搞清楚两者的区别,于是翻阅了大量的关于两者的资料,这才了解了上面的步骤二中的两种连接方式,这是linux套接字网络的特性,win平台不会有这个问题。

MySql主机127.0.0.1与localhost有什么区别?
8
最终解决方法:在my.cnf的[mysql]区段里添加 protocol=tcp

保存–>重启mysql,问题解决。