mysql -h 127.0.0.1 -u user # 秒連
mysql -h 192.168.1.100 -u user # 掛起 10-30 秒
Ping 正常,排除網路延遲。
MySQL 啟動時會對客戶端 IP 執行 **反向 DNS 查詢**(PTR 記錄),將 IP 解析為主機名,再與 mysql.user.Host 匹配。若 DNS 伺服器故障、超時或無 PTR 記錄,連接將卡在解析階段。
[mysqld]
skip-name-resolve
# 可選:同時禁用主機快取
skip-host-cache
重啟服務生效。連接速度提升至毫秒級。
| 原 Host 值 | 啟用 skip-name-resolve 後 | 修正 |
|---|---|---|
localhost | 無法匹配 127.0.0.1 | 改為 127.0.0.1 |
db.example.com | 無法解析,拒絕連接 | 改為具體 IP 或 CIDR 192.168.1.% |
% | 正常(通配所有 IP) | 保持 |
skip-name-resolve,建立 IP 版帳號:
CREATE USER 'app'@'192.168.1.%' IDENTIFIED BY 'Pass#2024';
GRANT ALL ON `app_db`.* TO 'app'@'192.168.1.%';
mysql -h 192.168.1.100 -u app -pskip-name-resolve,重啟 MySQL。DROP USER 'app'@'localhost';app,主機:%(或具體 IP 段)GRANT 語句並執行# firewalld
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# iptables
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save
skip-name-resolve + skip-host-cache。Host 欄位統一使用 **IP/CIDR**,禁用主機名。mysql.user,清理無用帳號與通配符過寬權限。