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

MySQL 2013 連接錯誤:Lost connection at waiting for initial communication packet 解決方案

     編輯:MySQL 綜合教學

MySQL 遠程連接報錯 SQL Error (2013) 根因與修復

使用 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 反向解析超時**。

根因分析

  1. 客戶端發起 TCP 連接。
  2. MySQL Server 接受連接後,**嘗試對客戶端 IP 做反向 DNS 解析**(獲取主機名),用於權限匹配(如 user@'host.example.com')。
  3. 若 DNS 服務器不可達或無 PTR 記錄,Server 會阻塞等待解析超時(預設無超時或極長),導致客戶端感知為「握手階段斷開」。

解決方案:禁用 DNS 解析

在 my.cnf / my.ini 的 [mysqld] 節點添加:

[mysqld]
skip-name-resolve

重啟 MySQL:service mysqld restart。

  • 啟用後,MySQL **不再進行反向 DNS 查詢**,直接用 IP 匹配權限表(user@'192.168.1.%')。
  • 權限表中 **不得包含主機名**,需全部改為 IP 或 % 通配符。

補充:skip-grant-tables 緊急救援

若忘記 root 密碼或權限表損壞,可臨時添加:

[mysqld]
skip-grant-tables
skip-networking  # 建議同時禁用網絡,防未授權訪問

重啟後**無需密碼、任意用戶**即可登入,修復密碼/權限後**務必移除**並重啟。

驗證步驟

  1. 本機 mysql -h 127.0.0.1 -uroot -p 確認服務正常。
  2. 遠程客戶端再次連接,應秒級建立連接,不再卡住等待。
  3. 執行 SHOW PROCESSLIST; 確認無 Waiting for DNS 狀態。

其他可能導致 2013 的原因

原因現象排查
max_allowed_packet 過小大包插入/查詢斷開增大至 64M+
wait_timeout/interactive_timeout 過短空閒連接被斷開調大至 28800
防火牆/安全組攔截TCP 握手失敗或中途斷開檢查 3306 端口通達性
客戶端/驅動版本不兼容握手協議不匹配升級驅動或降級 Server

總結

**90% 的「waiting for initial communication packet」都是 DNS 反解超時**。一行 skip-name-resolve 即可根治,記得同步清理權限表中的主機名。

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