Host 'xxx' is not allowed to connect to this MySQL server 核心原因有二:
localhost)# CentOS 7 / RHEL 7 (firewalld)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# Ubuntu (ufw)
ufw allow 3306/tcp
# Windows 防火牆 (PowerShell 管理員)
New-NetFirewallRule -DisplayName "MySQL 3306" -Direction Inbound -LocalPort 3306 -Protocol TCP -Action Allow
若修改過 my.cnf 中的 port,請同步調整防火牆規則。
-- 1. 以 root 登錄
mysql -uroot -p
-- 2. 創建用戶並授權 (推荐 8.0+ 語法)
CREATE USER 'dev_user'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON mydb.* TO 'dev_user'@'%';
FLUSH PRIVILEGES;
| 子句 | 含義 | 示例 |
|---|---|---|
ALL PRIVILEGES | 所有權限;可細化為 SELECT,INSERT,UPDATE 等 | SELECT, INSERT |
mydb.* | 針對 mydb 庫下所有表;*.* 為全庫全表 | testdb.orders |
'dev_user'@'%' | 用戶名 + 允許連接的主機;% 表示任意 IP | 'app'@'192.168.1.%' |
IDENTIFIED BY | 設置密碼(8.0+ 合併在 CREATE USER 中) | 'P@ssw0rd' |
% 縮小為具體應用服務器 IP 段REQUIRE SSL 防止流量劫持DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';# 客戶端測試
mysql -h server_ip -u dev_user -p -P 3306
# 或使用 telnet 檢查端口
telnet server_ip 3306
完成上述配置並通過驗證後,MySQL 遠程連接即可正常使用。