远程服务器SQLSTATE [HY000] [2002]连接超时

时间:2015-07-30 07:11:50

标签: php mysql centos cpanel

当使用php从运行在不同IP上的服务器(比如999.999.999.999)连接到远程MySQL数据库(比如888.888.888.888)时,我收到此错误:

  

SQLSTATE [HY000] [2002]连接超时

以下是我尝试或研究的内容:

  • 在远程服务器上,我允许来自“本地服务器”(888.888.888.88)的连接,但这没有帮助。
  • 有些答案建议将连接详细信息从localhost更改为127.0.0.1,但这与我无关,因为我们正在连接到远程数据库。
  • 我多次重启服务器(CentOS with cPanel),没有运气。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

重新提出这个问题是因为我在cPanel遇到了类似的问题而我发现的答案都没有解决。

解决此问题需要三个步骤。对我来说,第三个是至关重要的。

<强> 1。凭证

我们假设您已拥有访问数据库的正确凭据。这些可以测试:

    如果您有直接访问权限,可以在数据库本地
  • 远程,来自的那个给您带来麻烦的IP(您的CentOS服务器)。例如,您可以使用HeidiSQL(Win)或Sequel Pro(OSX)等程序作为完整性检查。

您还可以从麻烦的原始服务器和其他服务器运行类似以下的PHP脚本。如果只有您的服务器拒绝连接,则表示您没有凭据问题。

<?php
try {
    $db = new PDO('mysql:host=999.999.999.999;dbname=Database_Name_Goes_Here;charset=utf8',
            'User_Goes_Here', 'Password_Goes_Here',
            array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION )
            );
    echo "We connected.";
} catch (PDOException $e) {
    print($e->getMessage());
    }
?>              

<强> 2。远程访问:允许您的IP

大多数答案指出,在远程服务器中,您必须允许来自IP的连接。你已经这样做了。

对于其他所有人,如果您还在使用cPanel之类的OP,则可以在Remote MySQL的{​​{1}}部分添加IP。

第3。防火墙

在我找到的答案中,这是我缺少的成分。毕竟,错误信息是否可能是正确的,即连接只是超时?

这表示从服务器禁用外部连接。我调查了cPanel中是否存在任何可能发生冲突的参数,然后转向防火墙,提供了答案。

我不知道你正在使用哪种防火墙。以下是使用csf防火墙的方法,这在cPanel / WHM安装中很常见。假设您有SSH访问权限,请输入类似这样的内容,其中IP是远程数据库服务器的IP:

php.ini

  • 如果您有不同的防火墙,请参阅文档。
  • 如果您既没有ssh也没有WHM(或同等)访问权限,请让您的网站托管服务商为您取消阻止远程IP。