无法使用 php 函数连接到 mysql 服务器 (13)

无法使用 php 函数连接到 mysql 服务器 (13)

我打开了 Google 搜索结果中与此 MySQL 错误相关的所有链接。我花了好几个小时才让它正常工作。

我有一个网络服务器,(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

但无法使用 PHP 函数连接到 mysqlmysql_connect()

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

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

网络上找到的一些解决方案告诉我输入setbool与 selinux 关联的,但问题是 SELINUX 已经被禁用。

奇怪的是,我可以通过 CLI 连接,但不能通过 php 函数连接

另外,我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

网络状态监测 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

答案1

我可以从命令行 mysql 访问服务器 B,但也无法通过 httpd 连接我的远程数据库 - 我知道你说 selinux 在两边都被禁用了,但是在我的环境中,httpd 服务器端需要 selinux

setsebool httpd_can_network_connect_db=1 

使 apache 能够连接到远程数据库。

答案2

你的 my.cnf 中有类似的东西吗?

 bind-address            = 192.168.8.136

在 php 中您是否已safe_mode启用apache mod_security

答案3

检查您的 MySQL 根用户“主机”设置。也许可以尝试使用 anyhost、192.168.8.%、localhost 或“www.domain.tld”。最好使用其他用户进行测试,而不是使用 root...

答案4

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

setsebool -P httpd_can_network_connect=1

在 CentOs 6 上,你可以使用以下命令(不带 -P)

setsebool httpd_can_network_connect=1

相关内容