萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

解決 MySQL 遠程連接報錯:Host 'xxx' is not allowed to connect

MySQL 遠程連接拒絕錯誤排查全流程:權限、防火牆、綁定地址三重檢查

經典報錯 Host 'XXX' is not allowed to connect to this MySQL server 核心原因只有兩類:賬號無遠程授權、網絡層阻斷。本文提供標準化排查清單與修復腳本。

一、雙核心檢查清單

層面檢查項驗證命令
網絡層防火牆/安全組放行 3306telnet ip 3306 / nc -zv ip 3306
網絡層MySQL 監聽非 127.0.0.1netstat -ltnp | grep 3306 / ss -ltnp
權限層用戶 Host 匹配來源 IPSELECT user, host FROM mysql.user;
權限層密碼插件兼容性SELECT plugin FROM mysql.user WHERE user='xxx';

二、修復步驟:授權遠程訪問賬號

1. 登入 MySQL


# Windows
mysql -u root -p123456
# Linux
/usr/local/mysql/bin/mysql -u root -p

2. 創建/修改用戶授權遠程 IP


-- 指定單一 IP(最安全)
GRANT ALL PRIVILEGES ON db_name.* TO 'app_user'@'192.168.1.100' IDENTIFIED BY 'strong_pass' WITH GRANT OPTION;

-- 指定網段
GRANT ALL PRIVILEGES ON db_name.* TO 'app_user'@'192.168.1.%' IDENTIFIED BY 'strong_pass';

-- 允許任意 IP(僅測試環境)
GRANT ALL PRIVILEGES ON db_name.* TO 'app_user'@'%' IDENTIFIED BY 'strong_pass';

FLUSH PRIVILEGES;

參數解析:

  • ALL PRIVILEGES → 可改為 SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 等最小集
  • db_name.* → *.* 全庫、db.tbl 單表
  • @'ip' → 精確匹配客戶端來源 IP(含 NAT 後的公網/內網 IP)
  • WITH GRANT OPTION → 允許該用戶再授權他人,業務賬號**不建議**開啟

三、修改綁定地址


# /etc/my.cnf 或 /etc/mysql/my.cnf
[mysqld]
bind-address = 0.0.0.0  # 監聽所有網卡;或具體內網 IP 如 192.168.1.101
# skip-name-resolve  # 建議開啟,避免 DNS 反解延遲

systemctl restart mysqld
# 或 service mysql restart

四、防火牆/安全組放行


# CentOS 7 firewalld
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

# Ubuntu ufw
ufw allow from 192.168.1.0/24 to any port 3306

# iptables
iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.0/24 -j ACCEPT

五、MySQL 8.0 密碼插件陷阱

8.0 默認 caching_sha2_password,舊版驅動/客戶端(Navicat 12-、舊 JDBC、PHP mysqlnd 舊版)不支援。


-- 方案 1:改用 mysql_native_password
ALTER USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'strong_pass';
FLUSH PRIVILEGES;

-- 方案 2:升級客戶端/驅動至支援 caching_sha2_password 版本

六、驗證連通性


# 客戶端測試
mysql -u app_user -p -h 192.168.1.101 -P 3306
# 成功進入 mysql> 提示符即通
copyright © 萬盛學電腦網 all rights reserved