【mysql不能通过localhost或127.0.0.1连接数据库】MySQL不能通过localhost或127.0.0.1连接数据库

更新时间:2018-12-02    来源:mysql教程    手机版     字体:

【www.bbyears.com--mysql教程】

MySQL通过localhost无法连接数据库的解决

问题:一台服务器的PHP程序通过localhost地址无法连接数据库,但是如果设置为127.0.0.1则可以正常连接,连接其他数据库服务器也正常。MySQL的权限设置正确,且通过mysql命令行客户端可以正常连接数据库。

分析:这是典型的socket没有正确设置的情况。

连接MySQL数据库有两种方式:TCP/IP(一般理解的端口的那种)和Unix套接字(一般叫socket或者sock)。大部分情况下,可以用localhost代表本机127.0.0.1,但是在MySQL连接时,二者不可混用,而且MySQL中权限设置中localhost与127.0.0.1也是分开设置的。当设置为127.0.0.1时,系统通过TCP/IP方式连接数据库;当设置为localhost时,系统通过socket方式连接数据库。

解决:首先要看本机MySQL的socket套接字文件在哪里,查看命令是:

mysqld --verbose --help | grep socket输出结果显示套接字文件的位置,比如:这台服务器显示的是

socket                                            /var/run/mysqld/mysqld.sock


然后修改php的配置文件php.ini与之对应起来就好了。

找到这一项:

mysql.default_socket =一般来说这一项都是空的,改成:

mysql.default_socket = /var/run/mysqld/mysqld.sock

这里应写上一步查询到的文件,根据你的情况设置。至此php配置就修改好了,如果是CLI(命令行)方式或者CGI方式的话,立即就生效,如果是FASTCGI方式,需要重启一下fastcgi进程

不能使用127.0.0.1连接的解决办法


根据出错的提示信息“Warning: mysql_connect() [function.mysql-connect]: Can"t connect to MySQL server on "127.0.0.1"”  使用google搜索mysql_connect 有人说是可能mysql_connect这个函数被禁用了,使用其它的连接,测试过不行


修改my.cnf文件,去掉skip_networking,bind_address=127.0.0.1,重启mysql 故障依旧。

 

权限问题,grant all privileges on *.* to "root"@"127.0.0.1" identified by "密码";   然后flush privileges;  故障依旧。

 

修改/etc/hosts文件,添加127.0.0.1  localhost 项,故障依旧。

3、查看apache错误日志,发现只记录了文件不存在之类的日志信息,未发现和访问mysql数据连接文件相关的项目。

4、查看mysql的日志,未发现相关的连接项目。

5、最后我想起来要查看一下系统日志/var/log/messages 信息太多,清理之:  echo "" > /val/log/messages 然后访问 数据连接测试文件。发现了如下信息:

Nov 30 10:18:49 localhost setroubleshoot: SELinux 正在阻止http 守护进程连接到网络端口3306 For complete SELinux messages. run sealert -l a214e214-c710-4c84-9eb

2-12764f4b27de

结果就很明显了,是selinux闯的祸,关闭selinux测试一下“/usr/sbin/setenforce 0 立刻关闭SELINUX  ”  数据库连接一切正常。

本文来源:http://www.bbyears.com/shujuku/46229.html

热门标签

更多>>

本类排行