无法从php连接到远程Mysql服务器

4
  • 客户端系统:CentOS Linux release 7.0.1406 (Core)
  • 客户端IP:222.222.222.222
  • http://test.com 指向IP地址222.222.222.222

  • 服务器系统:Gentoo Base System release 1.12.13

  • 服务器IP:111.111.111.111

连接脚本:

$connection = new \mysqli('111.111.111.111', 'user', 'password', 'db');
if (mysqli_connect_error()) {
    echo "Error: {$connection->connect_error}"; 
}
else {
    echo "Server Info: {$connection->server_info}";
}

当我试图在浏览器中打开“http://test.com/test.php”时,我遇到了以下问题:
Error: Can't connect to MySQL server on '111.111.111.111' (13)

...但是当我在服务器222.222.222.222上从命令行启动此脚本时,我得到了另一个结果:

/usr/bin/php /var/www/reporter/test.php
Server Info: 5.5.14-enterprise-commercial-advanced-log

命令行直接连接也是正确的:

mysql -h 111.111.111.111 -u user -p -P 3306
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 25236357
Server version: 5.5.14-enterprise-commercial-advanced-log MySQL Enterprise Server - Advanced Edition (Commercial)

Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.




答案


客户环境问题 - Centos中的Selinux。修复命令:

setsebool -P httpd_can_network_connect=1

1
检查防火墙、Suhosin/Selinux 阻止的事情,等等。 - Marc B
很有把握错误代码13是权限问题。再次确认一下PHP中的密码是否正确? - rjdown
为什么在这行代码中有一个反斜杠 - new \mysqli('111.11? - Jay Blanchard
1
@JayBlanchard 全局命名空间,可能是不必要的,但我觉得这是一个好习惯...以防他在当前命名空间中声明了一个新的mysqli函数。请参见此处的示例http://php.net/manual/en/language.namespaces.fallback.php - rjdown
Marc B,该用户存在,端口已开放 - 我可以远程连接到数据库。我甚至可以使用相同的文件进行连接,但只能通过命令行方式进行,我不知道这种行为的原因。rjdown,用户名和密码正确 - 我从浏览器和命令行启动了相同的脚本,但只有通过命令行才能建立连接。 - Anton Qcl
1个回答

7

客户环境存在问题 - Centos 中的 Selinux。

修复命令:

setsebool -P httpd_can_network_connect=1

非常感谢您! - Rahim Khoja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接