很多朋友可能会遇到一个问题,不知道127.0.0.1和localhost的区别,但是有时候你会发现用localhost连接不上,而是改成127.0.0.1是可以连接的,那它们有什么区别呢,下面给大家介绍一下。mysql-h127.0.0.1时,使用TCP/IP连接,mysql服务器认为连接来自127.0.0.1或"localhost.localdomain"当mysql-hlocalhost时,不使用TCP/IP连接,而是使用Unixsocket;这时,mysql服务器认为客户端来自“localhost”。两种连接方式使用的权限记录如下1.行记录(因为先匹配记录)****************************1.row***************************Host:localhostUser:root......*****************************2.行****************************Host:127.0.0.1User:rootProof:shell>mysql-h127.0.0.1mysql>status;Currentuser:root@localhostSSL:NotinuseCurrentpager:stdoutUsingoutfile:''Usingdelimiter:;Serverversion:5.1.33-logSourcedistributionProtocolversion:10Connection:127.0。0.1viaTCP/IPshell>mysql-hlocahostmysql>status;Currentuser:root@localhostSSL:NotinuseCurrentpager:stdoutUsingoutfile:''Usingdelimiter:;Serverversion:5.1.33-logSourcedistributionProtocolversion:10Connection:LocalhostviaUNIXsocket发现一个问题昨天帮同事编译安装linux环境的时候遇到了一个问题:web服务器是apache,数据库是mysql。所以我写了一个PHP页面来测试与数据库的连接:$mysql=mysql_connect('localhost','root','');打开http://localhost/test.php测试提示:Can'tconnecttolocalMySQLserverthroughsocket...查看环境正常,认为数据库没有启动,于是查看进程,MySQL在进程中,重启看看My??SQL。使用mysql-uroot-p进入MySQL运行界面,直接使用/usr/local/php5/bin/php/web/test.php执行并连接数据库。执行失败,但是命令执行成功,郁闷。使用php命令直接执行成功,通过网页执行失败。是x引起的吗?在网上查了很多资料都没有找到解决办法。重新编译安装apache的问题还是一样。改localhost为127.0.0.1成功后,改localhost为127.0.0.1后连接成功,我开始陷入两难的思考:localhost失败127.0.0.1却成功了?pinglocalhost地址是127.0.0.1,没错,打开hosts添加127.0.0.1qttc使用qttc作为主机连接也正常,就是不识别localhost。不同的localhost连接方式导致阅读了很多资料,以了解PHP连接数据库时填入localhost的主机和其他主机的区别。最后了解到:当host填写为localhost时,mysql会使用unixdomainsocket进行连接当host填写为127.0.0.1时,mysql会使用tcp进行连接。这就是linuxsocket网络的特点。win平台不会有这个问题。解决方法是在my.sql文件的[mysql]段添加protocol=tcp。
