使用 HeidiSQL/Navicat 連接遠程 MySQL 時,等待 1-2 分鐘後報錯:
SQL Error (2013): Lost connection to MySQL server at 'waiting for initial communication packet', system error: 0
常見誤判為權限問題(root 只允許 localhost),實則多為 **DNS 反向解析超時**。
user@'host.example.com')。在 my.cnf / my.ini 的 [mysqld] 節點添加:
[mysqld] skip-name-resolve
重啟 MySQL:service mysqld restart。
user@'192.168.1.%')。% 通配符。若忘記 root 密碼或權限表損壞,可臨時添加:
[mysqld] skip-grant-tables skip-networking # 建議同時禁用網絡,防未授權訪問
重啟後**無需密碼、任意用戶**即可登入,修復密碼/權限後**務必移除**並重啟。
mysql -h 127.0.0.1 -uroot -p 確認服務正常。SHOW PROCESSLIST; 確認無 Waiting for DNS 狀態。| 原因 | 現象 | 排查 |
|---|---|---|
max_allowed_packet 過小 | 大包插入/查詢斷開 | 增大至 64M+ |
wait_timeout/interactive_timeout 過短 | 空閒連接被斷開 | 調大至 28800 |
| 防火牆/安全組攔截 | TCP 握手失敗或中途斷開 | 檢查 3306 端口通達性 |
| 客戶端/驅動版本不兼容 | 握手協議不匹配 | 升級驅動或降級 Server |
**90% 的「waiting for initial communication packet」都是 DNS 反解超時**。一行 skip-name-resolve 即可根治,記得同步清理權限表中的主機名。