首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Navicat 無法遠程連接 MySQL 解決方案:bind-address 與權限雙重檢查

     編輯:MySQL 資料庫相關知識

現象

Ubuntu/MySQL 5.0 本地命令列建表授權正常,Navicat 遠程連線報錯:

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

根因雙重檢查

層面檢查項命令/位置
網路綁定bind-address = 127.0.0.1 僅監聽本地/etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf
使用者權限Host 為 % 或具體 IPSELECT User, Host FROM mysql.user;
防火牆3306 端口放行ufw allow 3306 / iptables
MySQL 服務重啟生效配置systemctl restart mysql

解決步驟

1. 修改 bind-address 允許遠程

# 編輯配置
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

# 找到 bind-address 行,改為
bind-address = 0.0.0.0
# 或註釋掉 #bind-address = 127.0.0.1

# 重啟
sudo systemctl restart mysql

2. 確認使用者支援遠程

-- 查看現有
SELECT `User`, `Host` FROM `mysql`.`user` WHERE `User` = 'usera';

-- 若只有 localhost,新增 % 或具體 IP
CREATE USER 'usera'@'%' IDENTIFIED BY 'passwd';
GRANT ALL ON `testdb`.* TO 'usera'@'%';
FLUSH PRIVILEGES;

3. 驗證端口監聽

ss -tlnp | grep 3306
# 或
netstat -tlnp | 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

Navicat 連線設定

  • Host: 伺服器 IP(如 192.168.1.100)
  • Port: 3306
  • User: usera
  • Password: passwd
  • 編碼: UTF-8 / utf8mb4

常見坑點

修改 bind-address 後無法啟動
檢查 skip-networking 是否開啟(應關閉);IPv6 環境確保 :: 監聽。
權限表有殘留匿名用戶
DELETE FROM mysql.user WHERE User=''; FLUSH PRIVILEGES;
SELinux 阻擋
CentOS/RHEL: setsebool -P mysql_connect_any 1 或調整政策。
MySQL 8.0 預設 caching_sha2_password
Navicat 舊版不支援,改用 mysql_native_password:
ALTER USER 'usera'@'%' IDENTIFIED WITH mysql_native_password BY 'passwd';

結語

Navicat 遠程連不上 MySQL,90% 是 bind-address=127.0.0.1 與 Host='%' 缺一不可。雙重檢查網路綁定與使用者權限,配合防火牆、驗證插件相容性,即可快速解決。

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