我有一个MySQL数据库,由我在Windows服务器上托管,我想从远程网络服务器查询它。当我尝试使用PHP连接到MySQL数据库时(我知道,我应该使用mysqli):
$connection = @mysql_connect("203.0.113.0:3306", "username", "password");
无论是否指定端口,经过长时间加载后,我都会遇到errorno
2003 的错误:
无法在'203.0.113.0'(4)
上连接到MySQL服务器
以下是我在托管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
这是我目前所知道的:
3306
在TCP& UDP。skip-networking
文件中注释了bind-address
和my.cnf
。我如何编辑我的连接代码,或编辑我的MySQL服务器来修复此错误?
答案 0 :(得分:1)
在my.cnf:bind-address = 0.0.0.0
中绑定网址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。然后通过隧道转发端口,在数据库服务器端,您可以访问localhost环回IP上的服务。