mysql -h mysql.test.com -u beginner -p
ERROR 2013: Lost connection to MySQL server during query
甚至 mysql -h mysql.test.com 即報錯,**尚未進入密碼驗證階段**即中斷連線。
glibc 特定版本的 gethostbyaddr (內部 _nss_dns_gethostbyaddr_r) 存在緩衝區溢位 Bug。
mysqld 接受連線,呼叫 ip_to_hostname() 解析客戶端 IP 對應主機名 (用於權限表 Host 欄位匹配)。ip_to_hostname() → gethostbyaddr() → _nss_dns_gethostbyaddr_r()。mysqld 子進程崩潰。# RedHat 系統
rpm -Uvh glibc-2.3.x-xx.i386.rpm glibc-common-... glibc-devel-...
# 或使用 up2date / yum 更新
升級後重啟 MySQL 服務即可恢復正常。
GRANT ... TO 'user'@'192.168.1.%',避免反向 DNS 解析。--skip-name-resolve: 完全跳過主機名解析,**所有授權必須用 IP 或 localhost**。/etc/hosts,減少 DNS 查詢。mysql -h mysql.test.com -u beginner -p
Enter password: ********
Welcome to the MySQL monitor...
此問題為經典案例:**資料庫服務異常中斷不一定是資料庫本身的 Bug,底層系統庫 (glibc)、核心參數、檔案系統、網路子系統皆可能為禍首**。排查時應關注錯誤日誌、系統日誌 (/var/log/messages)、strace 輸出。