MySQL localhost无法连接数据库解决办法

爱互踩 爱互踩流量交换~

今天我使用127.0.0.1与localhost都无法连接数据库了,后来经过朋友指点终于找到了locahost无法连接数据库的解决办法了.

locahost无法连接mysql数据库.

问题:一台服务器的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不能连接localhost解决办法

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

2、使用google搜索mysql能用localhost连接,不能使用127.0.0.1连接,结果大部分人的解决办法是:修改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 ” 数据库连接一切正常.

相关广告
  • MySQL localhost无法连接数据库解决办法 MySQL localhost无法连接数据库解决办法 MySQL localhost无法连接数据库解决办法
相关阅读

MySQL localhost无法连接数据库解决办法

2019/10/10 17:35:53 | 谷歌SEO算法 | 5G标准出炉