我有两个虚拟专用服务器服务器,并且都有MySQL安装,一个用于测试,一个用于开发。我的一个服务器不允许我从外部连接。与用户;
'mytestuser'@'%'
根据开放端口查找器,有问题的服务器的端口 3306 似乎已关闭。我自己的 C++ 和 Java 程序监听任意端口,没有任何问题。为什么会发生这种情况?我该如何修复?
安装的 Ubuntu 是 Ubuntu 11.10 (GNU/Linux 2.6.32-042stab072.10 x86_64)
netstat -tuple
每台服务器上的结果
违规服务器
tcp 0 0 localhost.lo:submission *:* LISTEN root 39967664 -
工作服务器
tcp 0 0 *:mysql *:* LISTEN mysql 1847519288 -
答案1
问题在于服务器仅在内部进行监听。
删除该行bind-address 127.0.0.1
即可/etc/mysql/my.cnf
解决问题。
较新版本的 Ubuntu(≥16.04)可能有此行/etc/mysql/mysql.conf.d/mysqld.cnf
。
答案2
我的建议是,如果您确定端口已关闭(我发现 VPS 关闭该端口很奇怪),则更改 MySQL 的配置文件以使用另一个。
只需在终端中打开配置文件,sudo nano /etc/mysql/mysql.conf
然后查找[mysqld]
部分。在其中,查找显示为的行port = 3306
。将其更改为另一个未使用的端口并保存文件。
然后只需重新启动 VPS 或重新启动服务,例如sudo service mysql restart
。
需要注意的是,如果该文件mysql.conf
不在我上面提到的文件中,它可能位于其他地方:
/etc/my.conf
/etc/my.cnf
/etc/mysql/my.conf
如果该service
命令不起作用,请执行以下操作:
sudo /etc/init.d/mysql restart
如果问题仍然存在,那么就我而言,我会检查iptables(如果可以的话我实际上会删除 iptables 中的所有内容只是为了重新开始)或任何其他启用防火墙的选项。
因为它们是 VPS,所以我还会检查 VPS 控制面板,看看它是否有可以阻止端口的选项。
除此之外,我会nmap
在 VPS 上运行它来查看你打开了哪些端口。你需要从 VPS 外部运行它来查看它们打开了哪些端口。
netstat -tuplen
查看服务器上打开了哪些端口以及哪些端口处于监听模式也是一个好主意。
答案3
bind-address 127.0.0.1
我通过更改为bind-address 0.0.0.0
以便/etc/mysql/mysql.conf.d
MySQL 监听所有端口来解决这个问题。
另外,我设置了一个 mysql 用户帐户以供远程使用。有关更多详细信息,请参阅主机‘xxx.xx.xxx.xxx’不允许连接到此 MySQL 服务器。
答案4
您的配置可能位于目录中/etc/mysql/mysql.conf.d/mysqld.cnf
,如果不是这种情况,请进行验证。