環境: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) — **連接超時,握手包都收不到**。
ufw disable / Windows 防火牆) → **無效**。telnet 192.168.5.228 3306 不通 → **端口未監聽公網 IP**。netstat -anp | grep 3306:tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
**鐵證如山**:MySQL 只綁定 127.0.0.1,拒絕所有非本地連接。
[mysqld]
...
bind-address = 127.0.0.1 # 罪魁禍首
註釋說明:「默認只監聽 localhost,更兼容也更安全」。但生產/開發環境**必須**監聽 0.0.0.0 或具體內網 IP。
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 後,**必須**配合:
'user'@'192.168.5.%' 而非 '%'。REQUIRE SSL。MySQL 遠程連不上,**第一步查 netstat 看綁定地址**,第二步改 bind-address。別在防火牆、授權語句上浪費時間——**服務不聽端口,授權再對也白搭**。