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

MySQL 遠程連接失敗?90% 是 bind-address 搞的鬼——一招搞定

     編輯:MySQL 綜合教學

現場還原:明明授權了,為什麼連不上?

環境:Windows (192.168.5.196) 遠程連 Ubuntu MySQL (192.168.5.228)。

已執行標準授權:

GRANT ALL PRIVILEGES ON *.* TO 'longlong'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

Windows 客戶端報錯:ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.5.228' (10060) — **連接超時,握手包都收不到**。

排查邏輯:防火牆?網絡?配置?

  1. 關閉雙向防火牆(ufw disable / Windows 防火牆) → **無效**。
  2. telnet 192.168.5.228 3306 不通 → **端口未監聽公網 IP**。
  3. Ubuntu 執行 netstat -anp | grep 3306:
tcp  0  0 127.0.0.1:3306  0.0.0.0:*  LISTEN

**鐵證如山**:MySQL 只綁定 127.0.0.1,拒絕所有非本地連接。

根因定位:/etc/mysql/my.cnf 的一行配置

[mysqld]
...
bind-address = 127.0.0.1   # 罪魁禍首

註釋說明:「默認只監聽 localhost,更兼容也更安全」。但生產/開發環境**必須**監聽 0.0.0.0 或具體內網 IP。

一鍵修復:註釋 bind-address 並重啟

sudo vim /etc/mysql/my.cnf
# 找到 bind-address = 127.0.0.1,前面加 # 註釋
# bind-address = 127.0.0.1

sudo service mysql restart

驗證成果

netstat -anp | grep 3306
tcp  0  0 0.0.0.0:3306  0.0.0.0:*  LISTEN   # 現在監聽所有介面

Windows 客戶端再次連接:**秒連成功**。

安全加固:別裸奔

開放 0.0.0.0:3306 後,**必須**配合:

  • MySQL 用戶限制:'user'@'192.168.5.%' 而非 '%'。
  • 系統防火牆/安全組:只放行應用伺服器 IP 段的 3306。
  • 啟用 SSL 連接:REQUIRE SSL。

總結

MySQL 遠程連不上,**第一步查 netstat 看綁定地址**,第二步改 bind-address。別在防火牆、授權語句上浪費時間——**服務不聽端口,授權再對也白搭**。

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