【发布时间】:2014-01-29 13:33:55
【问题描述】:
我正在尝试使用 PDO 连接到外部数据库。
$dbh = new PDO('mysql:host=hotsname;port=3309;dbname=dbname', 'root', 'root');
但这不适用于我拥有的一台特定服务器。
我以为可能只允许某个主机,但我检查了 mysql 规则并在我个人拥有的服务器上尝试了此代码,并且连接正常。
所以我知道代码可以正常工作,并且它们对我来说没有障碍,并且防火墙正在接受对端口 3309 的请求并将其传递到端口 3306 上的正确服务器。
所以问题仅在一台服务器上。作为测试,我想我会打开端口 3306 来测试代码而不指定端口。
$dbh = new PDO('mysql:host=hotsname;dbname=dbname', 'root', 'root');
这立即奏效了。
所以我的问题是,为什么在添加端口时会导致它无法连接到数据库。只有这个特定的服务器有这个问题。
非常感谢您的宝贵时间。
更新
给出的错误只是“无法连接到 xxx.xxx.xxx.xxx 上的 mysql 服务器”。
我现在已经走得更远了。如果我有一个防火墙规则,允许使用 3306 在 3306 上传入服务器,则代码现在可以正常工作。所以即使我指定了一个端口,它似乎也忽略了这一点并强制它离开 3306。
【问题讨论】:
-
客户端机器上是否有出站防火墙规则阻塞了端口3309?
-
它做了什么而不是工作(它会产生什么错误)?连接用户是否有权从连接主机远程连接? MySQL 是否正在监听 TCP 连接(
skip-networking在 my.cnf 中未启用) -
@MichaelBerkowski 我已经更新了我的问题。
skip-networking也被禁用。连接用户具有我在其他服务器上成功使用相同代码以及检查 mysql 表并确保允许的主机是通配符%证明的权限。似乎我遇到问题的服务器完全忽略了端口,只使用 3306。它是一个带有 cpanel 的托管服务器。 -
@TheHumbleRat 啊,尝试与其他客户端一起调试它,然后像
mysql -hhostname -P3309 -uroot -proot一样,您可能需要与主机的支持人员交谈。你的 PDO 是正确的。 -
@MichaelBerkowski 很棒的建议。已经通过 ssh 尝试过,也没有工作。所以我肯定需要和主人谈谈。希望不会是这样,但这就是生活。非常感谢您的所有帮助,非常感谢。