首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 常見錯誤代碼解析:Server Gone Away、連線失敗與封包過大解決方案

     編輯:MySQL 資料庫相關知識

MySQL Server Has Gone Away (CR_SERVER_GONE_ERROR / CR_SERVER_LOST)

成因

  1. 連線逾時:預設 wait_timeout=8小時,閒置超過此時間伺服器主動斷開。
  2. 查詢過大:超過 max_allowed_packet (預設 1MB),伺服器視為異常封包切斷連線。
  3. 伺服器重啟/崩潰:檢查 mysqladmin version 確認運行時間。

解決方案

  • 客戶端自動重連:程式碼捕獲錯誤後重新連線並重試查詢。
  • 調大封包限制:mysqld --max_allowed_packet=16M 或在 my.cnf 設定。
  • 調整逾時:SET GLOBAL wait_timeout=28800 (秒)。
  • 持久連線:PHP 使用 mysql_pconnect 或連線池。

Can't Connect to [local] MySQL Server (Error 2002)

排查步驟

  1. 確認服務運行:ps aux | grep mysqld。
  2. 嘗試多種連線方式:
    mysqladmin version
    mysqladmin -h `hostname` version
    mysqladmin -h 127.0.0.1 --port=3306 version
    mysqladmin --socket=/tmp/mysql.sock version
  3. 常見原因:
    • 服務未啟動。
    • Socket 檔案被清理 (如 /tmp 定時清理任務) → 修改 my.cnf 指定 socket=/var/lib/mysql/mysql.sock。
    • TCP/IP 未啟用或防火牆阻擋 3306 埠。
    • 使用 MIT-pthreads 系統不支援 Unix Socket,需強制 -h 127.0.0.1。

錯誤代碼速查表

代碼常數名說明
2002CR_CONNECTION_ERROR無法連線至本地伺服器
2006CR_SERVER_GONE_ERROR伺服器已斷開
2013CR_SERVER_LOST查詢過程中連線中斷
1153ER_NET_PACKET_TOO_LARGE封包超過 max_allowed_packet
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved