1、mysql -h 127.0.0.1的时候,使用的是TCP/IP连接,此时,mysql server会认为,该连接来自于127.0.0.1或者是"localhost.localdomain"
2、mysql -h localhost的时候,使用的是Unix socket,而不是TCP/IP连接,所以这个时候,mysql server则会认为该client是来自"localhost"
3、mysql权限管理中的"localhost"有特定含义:注:虽然前面两者存在着连接方式上的区别,但是当localhost为默认的127.0.0.1的时候,两种连接方式所使用的权限记录都是下图中1.row的记录,因为记录在前,所以会先被匹配。
4、之前在搭建安装Linux环境时,出现了一个问题,服务器是apache,数据库是mysql,写了一段php连接数据库的测试代码的页面,代码如下:$mysql = mysql_connect('localhost','root','');
5、浏览器中输入http://localhost/ceshi.php进行测试时报错,提示:Can’t connect to local MySQL server through socket...
6、通过检查,服务器环境一切正常,就怀疑是不是数据库没有启咿蛙匆盗动的原因?而查看进程,mysql也在进程里的,于是重启了mysql服务。--通过mysql -u root -p 可以正常进入MySQL操作界面;--直接使用/usr/local/php5/bin/php /web/ceshi.php又可以正常连接数据库;--重启了apache,依然无效。于是就有些蒙圈了,直接通过命令可以执行ceshi.php,而通过浏览器就会执行失败,无奈百度了很多资料,未能找到解决方案,于是重装apache,但是,问题依然未能解决。
7、当然,遇到了问题解决不了是不会罢休的,于是又进行了各种尝试,后来,尝试到了将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平台不会有这个问题。
8、最终解决方法:在my.cnf的[mysql]区段里添加 protocol=tcp保存-->重启mysql,问题解决。