mysql -u root -p 本機正常,但 mysql -h 192.168.x.x -u root -p 報 ERROR 1130 (HY000): Host '192.168.x.x' is not allowed to connect to this MySQL server。經典的「授權表缺遠程 Host」問題。
-- 1. 登入本機 MySQL
mysql -u root -p
-- 2. 授權所有 IP(% 通配符)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password';
-- 3. 刷新權限生效
FLUSH PRIVILEGES;
-- 4. 重啟服務(視版本而定,通常無需重啟)
systemctl restart mysqld # 或 service mysqld restart
MySQL 權限系統按 user, host 雙主鍵匹配。安裝預設只建立 root@localhost、root@127.0.0.1、root@::1。遠程 IP 嘗試連線時,無匹配行 → 拒絕。新增 root@'%' 即允許任意 IP(生產環境建議限制具體 IP/網段)。
| 項目 | 檢查命令 | 正確狀態 |
|---|---|---|
| 防火牆 3306 | firewall-cmd --list-ports / iptables -nL | 含 3306/tcp |
| MySQL 監聽地址 | netstat -anp | grep 3306 / ss -lntp | 0.0.0.0:3306 或 :::3306(非 127.0.0.1) |
| 配置文件 bind-address | grep bind-address /etc/my.cnf | 註釋掉或設 0.0.0.0 |
| SELinux/AppArmor | getenforce / aa-status | Permissive 或已放行 mysqld |
app_user@'192.168.1.%',僅授權所需庫/表。GRANT ... TO 'user'@'192.168.1.0/255.255.255.0'(CIDR 寫法 8.0+ 支援)。REQUIRE SSL 強制加密傳輸。SELECT user, host FROM mysql.user; 檢查異常帳號。三分鐘搞定授權表、防火牆、bind-address 三重檢查,遠程連線即刻通暢。記住:最小權限原則永遠是第一道防線。