问题描述
我有两台VPS服务器,并且都安装了MySQL服务器,一台用于测试,一台用于开发。我的一台服务器不允许我从外部连接。与用户;
‘mytestuser’@’%’
根据an open port finder,有问题的服务器的端口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 -
最佳回答
问题在于服务器仅在内部进行侦听。
从/etc/mysql/my.cnf
删除行bind-address 127.0.0.1
解决了该问题。
较新版本的Ubuntu(≥16.04)在/etc/mysql/mysql.conf.d/mysqld.cnf
中可能有此行。
次佳回答
我的建议是,如果您确定端口已关闭(对于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中的所有内容只是为了重新开始)或任何其他firewall-enabled选项。
由于它们是VPS,因此我还将检查“ VPS控制面板”以查看是否有任何选项可以阻止端口。
除此之外,我将在VPS上运行nmap
来查看您打开了哪些端口。您需要从VPS外部运行它,以查看它们打开了哪些端口。
netstat -tuplen
也是一个好主意,以查看服务器上有哪些打开的端口以及哪些处于侦听模式。
第三种回答
我通过将/etc/mysql/mysql.conf.d
中的bind-address 127.0.0.1
更改为bind-address 0.0.0.0
来解决此问题(以便MySQL侦听所有端口)。
另外,我设置了一个供远程使用的mysql用户帐户(请参阅https://stackoverflow.com/a/24171107/132374)。
第四种回答
我使用这种方法:
sudo ufw status
sudo ufw allow XXXX/tcp
# use a port other than the default/predictable 3306
# work outside, and close the door when you are done
sudo ufw deny XXXX/tcp
无需更改其他配置文件,默认情况下也无需打开其他端口。