首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL skip_name_resolve 參數深度解析:DNS 緩存機制、性能權衡與安全加固

     編輯:MySQL 綜合教學

MySQL skip_name_resolve 參數深度解析:DNS 緩存機制、性能權衡與安全加固

skip_name_resolve 是 MySQL 性能調優與安全加固的經典開關。本文從 Host Cache 內部機制、DNS 解析流程、max_connect_errors 防暴力破解、參數開啟後的授權模型變化、host_cache_size 動態控制五個維度,構建完整認知體系。

一、Host Cache 內部機制

MySQL 為非本地 TCP 連接維護內存級 Host Cache,包含三欄:

  • IP:客戶端 IP
  • HOST:解析出的主機名(首次連接前為 NULL)
  • HOST_VALIDATED:解析驗證狀態(TRUE/FALSE)

可通過 performance_schema.host_cache 表觀測:


SELECT IP, HOST, HOST_VALIDATED, SUM_CONNECT_ERRORS, COUNT_AUTHENTICATION_ERRORS 
FROM performance_schema.host_cache;

二、DNS 解析與雙向驗證流程

  1. 新連接進入 → 在 Host Cache 創建記錄:HOST=NULL, HOST_VALIDATED=FALSE
  2. 檢測 HOST_VALIDATED=FALSE → 執行正向解析 IP → hostname
  3. 正向成功 → 執行反向解析 hostname → IP_list
  4. 反向解析結果包含原 IP → 更新 HOST=hostname, HOST_VALIDATED=TRUE
  5. 任一步驟失敗:
    • 永久失敗(如 NXDOMAIN) → HOST=NULL, HOST_VALIDATED=TRUE,後續不再解析
    • 臨時失敗(如超時) → HOST_VALIDATED=FALSE,下次連接重試

三、Host Cache 優缺點權衡

維度優點缺點
性能緩存命中避免重複 DNS 查詢首次連接阻塞於 DNS;大量客戶端導致 LRU 淘汰頻繁重解析
運維基於主機名授權,IP 變更無需改權限DNS 劫持/污染導致授權異常
安全SUM_CONNECT_ERRORS 配合 max_connect_errors 防暴力破解緩存被惡意填滿導致合法客戶端被擠出

四、max_connect_errors 防暴力破解實戰


-- 動態調整閾值(默認 100,測試設為 2)
SET GLOBAL max_connect_errors = 2;

-- 模擬中斷連接(telnet 建連後直接斷開)
telnet 192.168.1.100 3306
# 重複 2 次後,正常登入也會報錯:
# ERROR 1129 (HY000): Host '192.168.1.101' is blocked because of many connection errors

-- 解封三種方式
mysqladmin flush-hosts;                    -- 推薦,清空 Host Cache
TRUNCATE TABLE performance_schema.host_cache;  -- 5.6.6+ 支持
-- 或等待 LRU 自然淘汰

五、skip_name_resolve 開啟後的授權模型變化

  1. 禁用 DNS 解析 → mysql.user 表中基於主機名的賬號失效(如 'root'@'hostname')
  2. 錯誤日誌記錄:[Warning] 'user' entry 'root@hostname' ignored in --skip-name-resolve mode.
  3. 客戶端連接時,CURRENT_USER() 顯示為 'root'@'192.168.1.101'(IP 形式)
  4. 授權重構: 僅保留 'user'@'IP'、'user'@'127.0.0.1'、'user'@'::1'、'user'@'localhost'(Unix Socket 不受影響)

六、動態控制 Host Cache


-- 完全禁用 Host Cache(5.6.8+)
SET GLOBAL host_cache_size = 0;

-- 禁用 TCP/IP 連接(僅允許 Unix Socket)
-- 需在啟動參數添加 skip-networking

七、決策矩陣

場景建議理由
內網穩定、客戶端固定 IP、高併發短連接開啟 skip_name_resolve消除 DNS 開銷,IP 授權簡單可控
雲環境、客戶端 IP 動態、依賴安全組/主機名授權保持默認(關閉)主機名授權解耦 IP 變更,DNS 開銷可接受
遭受連接風暴攻擊開啟 + 降低 max_connect_errors + 監控 host_cache快速封禁惡意 IP,緩解連接佔用
排查連接異常查 performance_schema.host_cache + \s 確認協議直觀定位 DNS 失敗、封禁狀態、Socket/TCP 協議

理解 Host Cache 全鏈路,才能在性能、運維、安全三角中做出精準決策。建議將 host_cache_size、max_connect_errors、skip_name_resolve 納入巡檢清單,定期審視狀態變量與錯誤日誌。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved