当使用php从运行在不同IP上的服务器(比如999.999.999.999
)连接到远程MySQL数据库(比如888.888.888.888
)时,我收到此错误:
SQLSTATE [HY000] [2002]连接超时
以下是我尝试或研究的内容:
888.888.888.88
)的连接,但这没有帮助。localhost
更改为127.0.0.1
,但这与我无关,因为我们正在连接到远程数据库。cPanel
),没有运气。 有什么想法吗?
答案 0 :(得分:1)
重新提出这个问题是因为我在cPanel
遇到了类似的问题而我发现的答案都没有解决。
解决此问题需要三个步骤。对我来说,第三个是至关重要的。
<强> 1。凭证强>
我们假设您已拥有访问数据库的正确凭据。这些可以测试:
您还可以从麻烦的原始服务器和其他服务器运行类似以下的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