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

MySQL 遠程連接慢、skip-name-resolve 導致帳號失效的完整解決方案

     編輯:MySQL 資料庫相關知識

現象:遠程連接極慢

mysql -h 127.0.0.1 -u user   # 秒連
mysql -h 192.168.1.100 -u user  # 掛起 10-30 秒

Ping 正常,排除網路延遲。

根因:DNS 反向解析

MySQL 啟動時會對客戶端 IP 執行 **反向 DNS 查詢**(PTR 記錄),將 IP 解析為主機名,再與 mysql.user.Host 匹配。若 DNS 伺服器故障、超時或無 PTR 記錄,連接將卡在解析階段。

解決:啟用 skip-name-resolve

[mysqld]
skip-name-resolve
# 可選:同時禁用主機快取
skip-host-cache

重啟服務生效。連接速度提升至毫秒級。

副作用與對策:帳號 Host 必須用 IP

原 Host 值啟用 skip-name-resolve 後修正
localhost無法匹配 127.0.0.1改為 127.0.0.1
db.example.com無法解析,拒絕連接改為具體 IP 或 CIDR 192.168.1.%
%正常(通配所有 IP)保持

安全遷移步驟(零停機)

  1. 先**不加** skip-name-resolve,建立 IP 版帳號:
    CREATE USER 'app'@'192.168.1.%' IDENTIFIED BY 'Pass#2024';
    GRANT ALL ON `app_db`.* TO 'app'@'192.168.1.%';
  2. 驗證新帳號可連線:mysql -h 192.168.1.100 -u app -p
  3. 加入 skip-name-resolve,重啟 MySQL。
  4. 確認舊主機名帳號不再使用後,清理:DROP USER 'app'@'localhost';

Navicat 圖形化建立遠程帳號

  1. 用戶管理 → 新建用戶
  2. 用戶名:app,主機:%(或具體 IP 段)
  3. 密碼:強密碼
  4. 權限:勾選所需庫/表/欄位權限
  5. 保存 → 自動生成 GRANT 語句並執行

防火牆配置(Linux)

# 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**,禁用主機名。
  • ✅ 防火牆僅開放應用伺服器 IP 段訪問 3306。
  • ✅ 定期審計 mysql.user,清理無用帳號與通配符過寬權限。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved