我打开了 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()
我已经禁用SELINUX
并system-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