投票系統訪問緩慢,PHP 高 CPU,MySQL 正常。SHOW FULL PROCESSLIST 發現大量:
Id User Host db Command Time State Info
13012 unauthenticated user x.x.x.x:2501 None Connect 0 Reading from net NULL
10056 unauthenticated user x.x.x.x:2805 None Connect 0 Reading from net NULL
10311 unauthenticated user x.x.x.x:2306 None Connect 0 Writing to net NULL
10326 unauthenticated user x.x.x.x:2715 None Connect 0 login NULL
"unauthenticated user" 表示連線已建立 TCP,但 MySQL 尚未完成認證流程 (讀取客戶端用戶名/密碼包、驗證、權限檢查)。大量堆積意味著認證階段卡住或異常連線湧入。
MySQL 預設對客戶端 IP 做反向 DNS 查詢 (PTR 記錄) 以匹配 user@host 權限。DNS 服務器慢/不可達導致認證阻塞。
# 解決:my.cnf 禁用 DNS 解析
[mysqld]
skip-name-resolve
# 重啟生效。注意:權限表 host 欄位不再支援主機名,需全用 IP
# 解決:應用層加驗證碼、限流、修正連線池
# PHP 端:persistent connections (pconnect) 慎用,易洩漏
old_password 握手,MySQL 8.0+ 預設 caching_sha2_password# 解決:統一驅動版本、配置 default_authentication_plugin=mysql_native_password
skip-name-resolve + 重啟 PHP-FPM/MySQLtcpdump -i eth0 port 3306 -w mysql.pcap 抓包分析握手階段耗時SHOW GLOBAL STATUS LIKE 'Aborted_connects':認證階段中斷計數SHOW GLOBAL STATUS LIKE 'Connection_errors_accept':accept 階段錯誤unauthenticated user 數量歸零"unauthenticated user" 是癥狀而非病因。skip-name-resolve 只能治標 (解決 DNS 阻塞);根治需應用層連線管理規範 + 架構層連線池緩衝 + 安全層異常流量清洗三位一體。