首页 > 解决方案 > 无法远程访问 MySQL

问题描述

我正在使用 Windows Server 2016 尝试通过 IIS 托管 PHP 网站,该网站使用 MySQL 作为数据库,并单独拥有一个用 VB.NET(.NET 框架 4.7.2)编写的独立桌面应用程序,该应用程序也应该与 MySQL 数据库通信。

我能够设置网站,并且可以通过导航到https://mywebsite.com:8443/在外部网络上正确访问它。我可以使用我的网站来运行 PHP 脚本,它们反过来利用 localhost:3306 上的 MySQL 数据库。

当我尝试通过外部网络上的桌面应用程序访问数据库时,问题就出现了。如果我通过 VPN 连接到机器,请设置我的连接字符串,以便数据源指向端口 3306 的内部 IP 地址,然后我就可以正常连接了。但是,如果我从我的 VPN 断开连接,更改连接字符串以使数据源指向我的公共 IP 地址,则无法连接。它的价值是什么,这就是连接字符串的样子(唯一改变的是datasource

datasource=-public ip-;port=3306;username=dotnet;password=-password-;database=test;

我得到的具体错误是:

无法连接到任何指定的 MySQL 主机。

如果我将端口从 更改33068443(我认为这不正确,但我将它添加到我的 PHP 网站),我会收到一个不同的错误:

无法从传输连接中读取数据:连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。

我下了一个兔子洞,发现root默认情况下不允许外部请求,这就是我创建dotnet用户的原因。在 MySQL Workbench 中,这些是该用户的配置:

然后我读到 SQL 服务器默认bind-address设置为127.0.0.1,所以我将其更改为接受所有内容并通过运行进行验证:

mysqld --verbose --help

滚动直到我找到bind-address它打印的值是*.

最后,我读到我需要确保防火墙设置正确。我转到具有高级安全性的 Windows 防火墙,并看到端口 3306 的规则具有以下属性:

在这一点上,我不明白为什么它在 VPN 连接到机器时连接正常,但当我尝试从外部网络连接时失败。

标签: mysqlvb.net

解决方案


推荐阅读