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

MySQL 大量 "unauthenticated user" 連線阻塞:DNS 反向解析導致與解決方案

     編輯:MySQL 資料庫相關知識

現象描述

Id      User                Host              db  Command  Time  State  Info
3436942 unauthenticated user 192.168.0.4:49607     Connect  login
3436943 unauthenticated user 192.168.0.4:49608     Connect  login
... 大量相同狀態,資料庫停頓阻塞

根因分析

MySQL 預設對每個新連線執行 **DNS 反向解析**(IP → 主機名),用於權限表 Host 欄位匹配與日誌記錄。若 DNS 伺服器故障、緩慢或無 PTR 記錄,連線會卡在 "login" 狀態等待解析逾時,累積大量 unauthenticated user 導致資料庫無法處理正常請求。

解決方案比較

方案一:skip-name-resolve(推薦)

[mysqld]
skip-name-resolve
  • 優點:完全跳過 DNS 解析,連線建立極快,官方推薦優化項目
  • 缺點:權限表 Host 欄無法使用主機名,只能用 IP 或 %
  • 適用:權限已用 IP/通配符的環境

方案二:/etc/hosts 本地映射

# /etc/hosts
192.168.0.4   client-hostname
  • 優點:保留主機名權限,解析極快(本地檔案)
  • 缺點:需維護所有客戶端 IP 映射,擴展性差
  • 適用:客戶端 IP 固定、數量可控的環境

方案三:啟動參數

mysqld --skip-name-resolve

效果同方案一,適合臨時測試或無法修改 my.cnf 環境。

驗證方式

# 觀察 processlist 無 unauthenticated user 積壓
# 連線建立時間顯著縮短
# show variables like 'skip_name_resolve';  -- ON 表示生效
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved