博客 / 詳情

返回

Ubuntu 22.04 服務器 MySQL 3306遠程連接失敗排查與解決

一 背景

最近在一台阿里雲購買的 Ubuntu 22.04 服務器上就碰到了一個棘手的狀況:服務器重啓後,原本正常運行的 MySQL 數據庫無法通過 3306 端口進行遠程訪問。接下來,我將詳細記錄整個排查與解決的過程,希望能為遇到類似問題的小夥伴提供一些參考。

二 問題初現

服務器重啓後,嘗試使用客户端遠程連接 MySQL 數據庫,卻發現連接失敗。第一反應是檢查阿里雲的安全組設置,確認 3306 端口已開放。為了進一步定位問題,在服務器內部使用127.0.0.1進行連接,發現能夠正常連接,這説明 MySQL 服務本身運行是正常的,問題出在遠程訪問的環節。

三 排查過程

使用nmap工具對服務器進行端口掃描,命令為nmap <服務器IP>,掃描結果顯示:

PORT     STATE    SERVICE
3306/tcp filtered mysql

filtered狀態表明端口可能被防火牆或其他安全機制攔截。
接着,查看 Ubuntu 系統的防火牆狀態,執行ufw status,結果顯示Status: inactive,説明 Ubuntu 自帶的防火牆ufw並未啓用,那麼問題可能出在iptables上。
執行iptables -nL命令查看iptables規則,輸出結果如下:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:3306
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:3306
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8

從輸出中可以清晰看到,iptables的INPUT鏈中存在針對3306端口的DROP規則,這正是導致遠程無法連接 MySQL 的原因。

四 問題解決

明確問題後,解決起來就簡單了。執行以下命令在INPUT鏈中插入一條允許3306端口通過的規則:

iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

執行完這條命令後,再次嘗試遠程連接 MySQL 數據庫成功連接。

五 總結與建議

問題排查思路:遇到服務無法訪問的問題時,要逐步縮小排查範圍。先檢查外部網絡設置(如安全組),再檢查服務器內部的防火牆和服務配置,這樣可以更高效地定位問題。
規則持久化:上述解決方法中添加的iptables規則在服務器重啓後會丟失。如果希望規則永久生效,可以用iptables-persistent工具將規則保存,或者使用systemd服務管理來實現規則的自動加載。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.