我是新手,正在将我的网站从共享主机迁移到运行 Ubuntu 16.04 的新虚拟专用服务器 (Linode) 上的基于名称的虚拟主机。Apache 正在运行。我已安装 MySQL 并创建了一个空数据库。我还没有防火墙(目前);iptables 显示空列表。
我创建了一个名为“jk”的 MySQL 用户,可从任何地方访问。您可以在此查询结果中看到它:
mysql> select host, user from mysql.user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | jk |
| localhost | debian-sys-maint |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
4 rows in set (0.00 sec)
并且“netstat”表示端口 3306 正在从任何地方进行监听(查看第一个结果):
jk@bird:~$ netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 244 45.56.81.181:22 24.4.251.228:58915 ESTABLISHED
tcp6 0 0 :::80 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
Linode 上的一切看起来都很好(对我这个新手来说)。
但是当我尝试从我的 Mac 连接到它时,情况就不太好了。由于 DNS 仍然指向我的旧共享主机,我通过其数字 IPv4 地址指定我的 Linode 服务器。当我要求 macOS 的网络实用程序的端口扫描功能扫描我的 Linode 服务器上的端口 3306 时,它什么也没找到。为了验证我是否正确使用了此工具,我扫描了端口 22 和 80,发现它们按预期打开。同样,它说我的旧共享主机上的端口 3306 是开放的。
我的 Mac 上的 MySQL 客户端应用程序(Sequel Pro)证实了这个问题:
MySQL said: Can't connect to MySQL server on ‘45.56.81.181’ (61)
可能出了什么问题?
答案1
您误读了 netstat 输出。
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
端口仅供以下用户使用本地主机(进程间通信)。
对于侦听器,“本地地址”表示正在侦听的地址。由于唯一可以连接到 127.0.0.1 的计算机是本地主机,因此其他任何人都无法连接到该端口。如果“本地地址”为 0.0.0.0 或 45.56.81.181,则侦听器分别绑定到任何网卡上的任何地址或 LAN 地址。
对于侦听端口,外部地址始终为 0.0.0.0:*(因为侦听器上没有其他方)。外部地址仅对现有连接有效(状态不是“侦听”)。
在您的 mysql 配置中,您必须将其配置为监听所有接口(0.0.0.0)或 LAN 接口。
有关配置 MySQL 进行网络访问的文档请参阅此处:http://dev.mysql.com/doc/refman/5.7/en/server-options.html