1

我有一个 MySQL 数据库,由我在 Windows 服务器上托管,我想从远程网络服务器查询它。当我尝试使用 PHP 连接到 MySQL 数据库时(我知道,我应该使用 mysqli):

$connection = @mysql_connect("203.0.113.0:3306", "username", "password");

无论是否指定端口,经过长时间的加载后,我都会收到此错误,并errorno显示2003

无法连接到“203.0.113.0”上的 MySQL 服务器 (4)

这是我netstat -n在托管 MySQL 服务器的服务器上在命令提示符下运行时得到的结果:http: //pastebin.com/pbRJNqCZ。它填满了屏幕,所以我无法复制所有内容,但我知道其他所有内容都是(我看到了几个值为 3306 的端口,即 MySQL 端口):

TCP    127.0.0.1:port        127.0.0.1:port        ESTABLISHED

当我运行时,netstat -a | find "LISTENING"我得到: http: //pastebin.com/Lqj2BrQK

到目前为止,这是我所知道的:

  • MySQL 服务器未启动并不是错误,因为我可以在本地连接到它。
  • 网络服务器无法连接到 MySQL 数据库不是错误,因为我可以连接到其他数据库
  • 不是认证错误(用户名密码正确,远程服务器有权限)
  • 这不是端口转发错误,因为端口3306在 TCP 和 UDP 上都被转发。
  • 能够连接到托管服务器的机器不是错误,因为我可以很好地 ping 它。
  • 服务器不仅在 localhost 接口上侦听。skip-networking并在我的文件bind-address中被注释掉。my.cnf

我如何编辑我的连接代码,或编辑我的 MySQL 服务器来修复这个错误?

4

1 回答 1

1

总结我们的讨论/聊天

在 my.cnf: 中绑定网络地址 0.0.0.0bind-address = 0.0.0.0并确保skip-networking被注释掉或不存在。

查看netstat -a | find "LISTENING"

根据您的 pastebin,有一个服务正在侦听 3306。测试该端口是否可以从服务器本身的 NIC 地址访问。这样外部防火墙不会生效。一个简单的测试是尝试与该端口建立 telnet 连接。该工具可以获取更详细的信息nmap。Nmap 已将 mysql 端口显示为已过滤。这表明本地数据包过滤器存在问题,在本例中为 Windows 防火墙。

确保将 Windows 防火墙配置为允许从所有或特定计算机对 TCP 端口 3306 进行公共访问。在公共配置文件中设置规则,或者,如果两台服务器均由同一域控制器控制,则在域配置文件中设置规则。当从本地机器访问成功时,从远程 Web 服务器尝试相同的操作。

如果未能正确配置远程访问 MySql 端口,请考虑在两台机器之间建立 SSH 隧道。一旦建立,您就可以像在本地计算机上一样访问 MySql。然后通过隧道转发端口,在数据库服务器端,您可以访问本地主机环回 IP 上的服务。

于 2014-07-08T05:39:36.643 回答