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

MySQL 啟動失敗 Error 2013 多種解決方案總覽

     編輯:MySQL 綜合教學

MySQL 啟動失敗 Error 2013 多種解決方案總覽

在使用 MySQL 時,經常會遇到 Lost connection to MySQL server during query(錯誤代碼 2013)的問題。這通常發生在查詢大量數據、修改大表或網路延遲較高的情況下。以下整理了從代碼層、配置層、表維護等多個維度的解決思路,幫助你快速定位並修復問題。

一、代碼層面:自動重連機制

在 PHP 等應用程式的資料庫連接邏輯中,加入錯誤碼判斷與重連邏輯,可有效緩解斷線導致的業務中斷。

if (in_array(mysql_errno(), [2006, 2013])) {
    mysql_close();
    mysql_connect(...); // 重新建立連接
    mysql_query(...);   // 重試查詢
}

核心邏輯:捕捉 2006(MySQL server has gone away)與 2013 錯誤,主動關閉舊連接並重新連線後重試 SQL。

二、MySQL 服務端配置優化

編輯配置文件(Linux 為 my.cnf,Windows 為 my.ini),在 [mysqld] 區段調整關鍵參數:

  • wait_timeout = 600:將非互動式連接的超時時間延長至 600 秒(預設 28800 秒),減少長連接被斷開的機率。
  • max_allowed_packet = 500M:大幅提升單次數據包的最大允許大小(預設僅 16M),解決大字段寫入或大結果集傳輸導致的 Got a packet bigger than 'max_allowed_packet' bytes 錯誤。

修改後需重啟 MySQL 服務生效。Windows 系統下配置文件常見路徑:D:\MySQL_Data\MySQL Server 5.5\my.ini 或安裝目錄下的 my-huge.ini。

三、動態調整全域變數(無需重啟)

登入 MySQL 後執行以下命令即時生效,適合臨時應急:

SET GLOBAL wait_timeout = 60000;
SET GLOBAL max_allowed_packet = 1073741824; -- 1GB,按需調整

可先用 SHOW VARIABLES LIKE '%timeout%'; 及 SHOW VARIABLES LIKE 'max_allowed_packet'; 確認當前值。

四、表級維修:針對單表異常

若僅特定表出現 2013 錯誤,多半是表損壞導致。執行修復命令:

REPAIR TABLE `your_table_name`;

或使用 myisamchk -r(MyISAM 引擎)離線修復,通常能徹底解決該表引發的連接中斷。

五、DNS 解析導致的連接延遲

錯誤訊息 Lost connection to MySQL server at 'reading initial communication packet' 並伴隨 system error 104/111,常為 DNS 反向解析超時。解決方法:

  1. 在 [mysqld] 添加 skip-name-resolve,禁止 MySQL 對客戶端 IP 做主機名解析(需重啟)。
  2. 或在客戶端 hosts 文件添加 IP 與主機名映射(如 127.0.0.1 localhost),無需重啟服務。

補充:錯誤 1067「程序意外終止」快速排查

若 MySQL 服務啟動直接報 1067,常見原因及對策:

  • 密碼修改後未正確關閉服務:用 mysqladmin -u root -p shutdown 正常關閉後再 net start mysql。
  • 配置文件 basedir/datadir 路徑錯誤:確保 my.ini 中路徑指向實際安裝目錄與數據目錄,且使用正斜線 /。
  • 權限不足:檢查 MySQL 目錄是否授予 SYSTEM 用戶完全控制權限。
  • 殘留配置衝突:刪除 %WINDIR%\my.ini 及 C:\my.cnf 等多餘配置文件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved