帳號授權無誤、bind-address=0.0.0.0、服務正常,但遠程仍無法連線,多半是 iptables 規則順序導致 3306 被隱性 DROP 攔截。關鍵在於 規則必須插在 ICMP 接受規則之前。
vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
service iptables restart
# 仍不通,因為後面隱性 DROP 已生效
# 找到這行
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
# 在其**上一行**插入
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
service iptables restart
# 立即生效
iptables -L -n -v --line-numbers
# 確認 3306 ACCEPT 行號 < ICMP ACCEPT 行號 < REJECT/DROP 行號
firewall-cmd --permanent --add-port=3306/tcp && firewall-cmd --reloadufw allow 3306/tcpiptables 規則自上而下首次匹配生效,ACCEPT 必須置於任何 DROP/REJECT 之前。養成 iptables -I (insert) 而非 -A (append) 的習慣可避免 90% 此類問題。