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

解決 Navicat 無法遠程連接 MySQL:bind-address 配置詳解

     編輯:MySQL 綜合教學

問題現象

Ubuntu Server 安裝 MySQL 5.0,本地命令列可登入、建表、授權,但 Windows 端 Navicat 連線報錯:

2003 – Can't connect to MySQL server on 'ubuntu' (10061)

mysql.user 顯示帳號已有 % 主機權限,防火牆也已放行 3306,仍無法連線。

根因分析

MySQL 預設綁定 127.0.0.1(僅本地回環),導致外部 TCP 連線直接被拒。錯誤碼 10061 即「連線被拒絕」,非認證失敗(1045)。

解決步驟

1. 修改配置檔

# 編輯 /etc/mysql/my.cnf (或 /etc/my.cnf)
# 找到 [mysqld] 區段
bind-address = 127.0.0.1   # 註釋或修改

# 改為監聽所有介面
bind-address = 0.0.0.0
  • 0.0.0.0 代表監聽所有網卡 IPv4 位址
  • 若僅需特定內網 IP,可改為該 IP(如 192.168.1.100)
  • MySQL 8.0+ 也支援 bind-address = * 寫法

2. 重啟服務生效

# Systemd
sudo systemctl restart mysql

# 或 SysVinit
sudo /etc/init.d/mysql restart

3. 驗證監聽狀態

ss -ltnp | grep 3306
# 或
netstat -ltnp | grep 3306
# 應顯示 0.0.0.0:3306 或 :::3306

4. 防火牆確認(必要時)

# UFW
sudo ufw allow 3306/tcp

# iptables
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

安全性補強(生產環境必做)

  1. 建立專用遠程帳號,限制來源 IP:
    CREATE USER 'app'@'192.168.1.%' IDENTIFIED BY 'strong_pwd';
  2. 啟用 SSL:REQUIRE SSL 強制加密傳輸
  3. 禁用 root 遠程登入:DELETE FROM mysql.user WHERE User='root' AND Host!='localhost'; FLUSH PRIVILEGES;
  4. 變更預設埠:port = 33061 減少掃描攻擊

常見誤區速查

誤區真相
以為授權 % 就能遠程連授權只管權限,bind-address 管網路層面能不能進來
改完 my.cnf 沒重啟配置唯有重啟 mysqld 才生效
雲主機安全組/防火牆未放行雲廠商預設常封 3306,須在控制台開放
SELinux / AppArmor 攔截檢查 audit.log,必要時調整策略或設為 Permissive

Debian/Ubuntu 版本差異提醒

  • Debian 9+/Ubuntu 18.04+:配置檔常在 /etc/mysql/mysql.conf.d/mysqld.cnf
  • MySQL 8.0:bind-address 可寫多行,支援 IPv6 ::
  • MariaDB:同樣適用,配置檔通常在 /etc/mysql/mariadb.conf.d/50-server.cnf

小結

bind-address = 0.0.0.0 + 重啟服務 + 防火牆放行 是解決 MySQL 遠程連線的標準三部曲。生產環境務必配合最小權限帳號、SSL、非預設埠、雲安全組,構建纵深防禦。

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