PHP - 无法连接到远程 MySQL 数据库

标签 php mysql mysql-error-2003

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

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

无论是否指定端口,在长时间加载后,我都会收到此错误,errorno2003:

Can't connect to MySQL server on '203.0.113.0' (4)

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

TCP    127.0.0.1:port        127.0.0.1:port        ESTABLISHED

当我运行 netstat -a |找到“LISTENING” 我得到:http://pastebin.com/Lqj2BrQK

这是我目前所知道的:

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

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

最佳答案

总结 our discussion/chat :

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

检查 netstat -a | find "LISTENING"

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

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

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

关于PHP - 无法连接到远程 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24592883/

相关文章:

php - AJAX、Laravel 4.2 - POST 状态已取消,如何发布到路由

php - mysql LIKE 搜索不适用于带空格的文本

php - 有数组时如何进行查询

mysql - 无法连接到MySQL服务器错误111

MYSQL - 无法连接到 'localhost' 上的 MYSQL 服务器 (10061)

php - Mysql Union All中如何识别表

mysql - 使用 resultSet.update() 将数据插入到 mySQL 中的 2 个表中时出错

android - Android 中的连接拒绝错误

mysql - 无法连接MySQL服务器错误111

javascript - 两个下拉列表,第二个下拉列表填充数据库中的值