【发布时间】:2014-08-26 21:21:51
【问题描述】:
我有一个 MySQL 数据库,由我在 Windows 服务器上托管,我想从远程网络服务器查询它。当我尝试使用 PHP 连接到 MySQL 数据库时(我知道,我应该使用 mysqli):
$connection = @mysql_connect("203.0.113.0:3306", "username", "password");
无论是否指定端口,长时间加载后,我都会收到此错误,并带有 2003 的errorno:
无法连接到“203.0.113.0”上的 MySQL 服务器 (4)
这是我在托管 MySQL 服务器的服务器上的命令提示符下运行 netstat -n 时得到的结果: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 服务器来修复此错误?
【问题讨论】:
-
您确定没有防火墙问题吗?当你说端口被转发时,你为什么不连接到本地端口?
-
nmap从远程引擎报告什么?更改配置后是否重新启动了 MySql 服务器?你检查过netstat在服务器机器上报告的内容吗? -
@ElliottFrisch 我很确定这不是防火墙问题,因为我还在那台机器上托管了一个 Minecraft 服务器。我试过连接到本地端口,它给出了同样的错误。
-
我在
netstat中看不到mysqld 正在监听。 my.cnf 文件中有skip-networking吗?这应该被评论或不存在。试试bind-address = 0.0.0.0。不排除您在错误的位置编辑 my.cnf 文件并且 mysqld 实例在启动时没有读取该文件。或者它没有读取该文件的权限。有可用的日志文件吗? -
我刚刚注意到,您没有列出监听服务。那是 Linux 上的
-l开关,正如我所查找的,这可以通过 Windows 上的netstat -a | find "LISTENING"来实现。
标签: php mysql mysql-error-2003