首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 本地能連遠程連不上排查全流程:防火牆、bind-address、用戶授權、雲廠商安全組四大關卡

     編輯:MySQL 綜合教學

MySQL 本地能連遠程連不上排查全流程

經典場景:localhost 連得上,遠程 mysql -h ip 連不上。本文提供**四步排查法**,覆蓋網路、防火牆、MySQL 配置、用戶權限、雲安全組,直擊痛點。

步驟 1:排除網路與防火牆 (最基礎)

  1. ping 192.168.1.211 — 不通 = 網路不通 (VPC/路由/安全組)。
  2. telnet 192.168.1.211 3306 — 失敗 = 端口被攔截。
  3. **Linux 防火牆放行 3306**:
# firewalld (CentOS 7+)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

# iptables
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save

步驟 2:檢查 MySQL 監聽地址 (核心配置)

netstat -anp | grep 3306
# 若輸出: tcp  0  0  127.0.0.1:3306  -- 僅監聽本地!

**修正 my.cnf**:

[mysqld]
bind-address = 0.0.0.0  # 監聽所有網卡
# 或具體內網 IP: bind-address = 192.168.1.211

修改後 systemctl restart mysqld,再驗證 netstat 應顯示 0.0.0.0:3306 或 :::3306。

步驟 3:雲廠商安全組/防火牆 (雲上必查)

  • 阿里雲/騰訊雲/UCloud/AWS/Azure **控制台安全組/防火牆規則** 必須放行 **入方向 3306**。
  • 即使服務器防火牆開了,雲層面攔截也連不上。

步驟 4:用戶授權 (權限模型)

mysql> USE mysql;
mysql> SELECT host, user FROM user;
+-----------+------+
| host      | user |
+-----------+------+
| 127.0.0.1 | root |
| %         | app  |
+-----------+------+

root 默認只允許 localhost (host=127.0.0.1/localhost)。遠程連接需:

-- 方案 A: 修改現有用戶 host (不推薦 root)
UPDATE user SET host='%' WHERE user='root' AND host='127.0.0.1';
FLUSH PRIVILEGES;

-- 方案 B: 建立專用遠程用戶 (推薦,最小權限)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON `my_db`.* TO 'app_user'@'%';
FLUSH PRIVILEGES;

步驟 5:重啟驗證

systemctl restart mysqld
# 遠程測試
mysql -h 192.168.1.211 -u app_user -p

排查決策表

現象telnetnetstat bind雲安全組用戶 host定位
Connection refused❌127.0.0.1✅%bind-address 錯誤
Connection timeout❌0.0.0.0❌%雲安全組/防火牆
Access denied✅0.0.0.0✅127.0.0.1用戶無遠程權限
SSL error✅0.0.0.0✅%客戶端/服務端 SSL 不匹配

安全最佳實踐: 生產環境**禁用 root 遠程**、**強密碼**、**SSL 加密**、**SSH 隧道/VPN 跳板機**、**最小權限授予**、**定期審計用戶 host 列**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved