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

MySQL 常見錯誤問答集:Server Gone Away、Can't Connect 完整排查指南

     編輯:MySQL 資料庫相關知識

前言

本文針對兩大高頻錯誤 MySQL server has gone away 與 Can't connect to [local] MySQL server,提供成因分析、排查步驟、解決方案與配置調整建議。

一、錯誤 1:MySQL server has gone away

相關錯誤:Lost connection to server during query

主要成因

  1. 連線逾時: 預設 8 小時無活動自動斷開(wait_timeout)。
  2. 查詢過大/異常: 封包超過 max_allowed_packet(預設 1MB),伺服器視為客戶端錯誤而斷開。
  3. 伺服器崩潰/重啟: 實際服務已停止。

排查與解決

  • 檢查服務存活:mysqladmin version 看 Uptime。
  • 腳本端實作**自動重連**機制(發查詢前先 ping 或捕獲錯誤重連)。
  • 調大封包限制:啟動參數 -O max_allowed_packet=16M(按需分配記憶體)。
  • 調整逾時:wait_timeout=28800(秒)或更大。

常見錯誤代碼

二、錯誤 2:Can't connect to [local] MySQL server

兩種連線方式

  • Unix Socket: 本機連線,透過檔案 /tmp/mysql.sock,速度較快。
  • TCP/IP: 透過 Port 3306,支援跨主機。

若未指定主機或用 localhost → 自動走 Socket;指定 IP/主機名 → 走 TCP/IP。

排查清單

  1. 服務是否啟動? ps aux | grep mysqld 確認進程存在。
  2. Socket 檔案是否存在? ls -l /tmp/mysql.sock。可能被 cron 清理誤刪。
  3. Port 是否正確? 預設 3306,檢查 my.cnf 或啟動參數。
  4. 防火牆/SELinux 阻擋? 開放 3306 或 Socket 路徑權限。
  5. MIT-pthreads 環境: 無原生執行緒系統需指定 -h hostname 強制 TCP/IP。

測試連線指令集

mysqladmin version
mysqladmin variables
mysqladmin -h `hostname` version
mysqladmin -h `hostname` --port=3306 version
mysqladmin -h 'your_ip' version
mysqladmin --socket=/tmp/mysql.sock version

注意: `hostname` 為反引號(鍵盤左上角),非單引號。

Socket 路徑自訂

# 編譯時指定
./configure --with-unix-socket-path=/path/to/socket

# 啟動時指定
safe_mysqld --socket=/path/to/socket &
# 客戶端環境變數
export MYSQL_UNIX_PORT=/path/to/socket

三、Linux 核心傾倒導致執行緒殭屍

若發現 mysqld 進程殘留,需用 mysql_zap 腳本清理後再重啟。

小結

「逾時斷線」與「Socket/Port 不匹配」佔 90% 以上連線錯誤。建立連線池健檢、調整 wait_timeout/max_allowed_packet、固定 Socket 路徑、監控服務存活,可徹底消除此類問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
代碼含義
CR_SERVER_GONE_ERROR客戶端無法發送查詢給伺服器
CR_SERVER_LOST發送成功但未收到完整回應