問題描述
我有兩台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
無需更改其他配置文件,默認情況下也無需打開其他端口。