无法连接到MySQL服务器(13)使用PHP函数

我打开谷歌结果给我的每一个关于这个MySQL错误的链接。 我一直花费数小时才能完成这个工作。

我有一个Web服务器(apache in centos installed in host B, and want to connect to a MySQL server in host A)两台主机都在同一个子网中。

我可以使用CLI访问远程mysql mysql -u root -h <ip> -p

但不能连接到MySQL使用PHP函数mysql_connect()

我已经禁用SELINUXsystem-config-firewall-tui并在/etc/my.cnf中包含以下语法

  [client] port =3306 socket = /var/lib/mysql/mysql.sock 

networking中find的一些解决scheme告诉我要input与selinux关联的setbool ,但事实是,SELINUX已经被禁用了。

奇怪的是,我可以连接通过CLI,但不是在PHPfunction

另外,我在两个主机都有php-mysql


这是我的main.php

 <?php mysql_connect('192.168.8.136','root','admin') or die (mysql_error()); echo "Connected to MySQL server"; mysql_select_db("web") or die (mysql_error()); echo "Connected to Database"; ?> 

这是我的/etc/my.cnf

 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld/log id-file=/var/run/mysqld/mysqld.pid 

selinux状态

SELinux status: disabled

netstat -atn tcp 0 0 0.0.0.0:3306 0.0.0.0:* Listen

客户端接收到apache的错误:

[error] [client 127.0.0.1] PHP warning: mysql_connect(); cant connect to mysql server (13) in /var/www/html/main.php on line 2

我可以从服务器B从命令行mysql访问,但我也无法通过httpd连接我的远程数据库 – 我知道你说selinux是禁用双方,但在我的情况下,httpd服务器端需要selinux

 setsebool httpd_can_network_connect_db=1 

使apache连接到远程数据库。

你在my.cnf有这样的事吗?

  bind-address = 192.168.8.136 

和在PHP你有safe_modeapache mod_security启用?

检查你的MySQL根用户“主机”设置。 也许尝试使用anyhost,192.168.8。%,localhost或“www.domain.tld”。 用另一个用户testing而不是使用root可能是一个好主意…

试试这些步骤,看看它是否改变了一切:

  1. 编辑/etc/my.cnf并将bind-address = 127.0.0.1更改为您的Mysql服务器的IP。
  2. 允许root用户从任何主机连接

mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

但是,build议不允许远程root用户访问,您应该创build一个新用户,并且只给它一个特定数据库所需的权限并使用该用户。

更新:一开始没有注意到发布date,但希望有一天能帮助别人。

使用下面的代码。 我也得到了答案。

 setsebool -P httpd_can_network_connect=1 

在CentOs 6上,您可以使用以下(无-P)

 setsebool httpd_can_network_connect=1 

试试这应该工作

  <?php // Mysql settings $user = "root"; $password = "admin"; $database = "IP"; $host = "yourhost"; mysql_connect($host,$user,$password); mysql_select_db($database) or die( "Unable to select database"); ?>