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

MySQL 常見錯誤診斷與解決方案速查手冊

     編輯:MySQL 資料庫相關知識

一、判斷是 Server 掛了還是 Client 連不上

mysqladmin version
# 若回應正常,顯示 Uptime → Server 活著,問題在 Client/網路
# 若無回應或 timeout → 檢查 mysqld 進程
ps aux | grep mysqld
# 查錯誤日誌:/var/lib/mysql/hostname.err

二、常見錯誤代碼與對策

1. MySQL server has gone away

  • 原因 A:閒置超時 預設 8 小時(wait_timeout)無活動自動斷線。
    解決:調大 wait_timeout 或應用端實作重連機制。
  • 原因 B:封包過大/異常 超過 max_allowed_packet。
    解決:增大該參數(如 64M)。

2. Can't connect to [local] MySQL server

逐步排查:

  1. 確認 mysqld 進程存在。
  2. 嘗試多種連線方式定位問題:
    mysqladmin version
    mysqladmin variables
    mysqladmin -h `hostname` version
    mysqladmin -h `hostname` --port=3306 version
    mysqladmin -h 'server_ip' version
    mysqladmin --socket=/tmp/mysql.sock version
    
  3. 本機連線優先走 Unix Socket;遠端或指定 IP 走 TCP/IP。Socket 路徑錯誤是常見原因。

3. Host 'hostname' is blocked

Host 'hostname' is blocked because of many connection errors.
Unblock with 'mysqladmin flush-hosts'
  • 來源 IP 連線錯誤達 max_connect_errors(預設 10)次,Server 判定為攻擊而封鎖。
  • 立即解封:mysqladmin flush-hosts。
  • 根治:調大 max_connect_errors(如 10000),並檢查應用連線邏輯(重試風暴、密碼錯誤等)。

4. Access denied for user 'root'@'localhost'

  • 密碼錯誤、權限表損壞、或 skip-grant-tables 模式下未執行 FLUSH PRIVILEGES。
  • 重置 Root 密碼流程見文章 91464。

三、備份與還原失敗常見原因

  • mysqldump 缺少 --single-transaction 導致鎖表影響線上服務。
  • 還原時 max_allowed_packet 過小導致大 INSERT 失敗。
  • 版本不相容:高版本備份還原至低版本可能失敗。

四、效能相關錯誤徵兆

  • Lock wait timeout exceeded:交易等待鎖超過 innodb_lock_wait_timeout(預設 50s)。檢查長交易、缺少索引、死鎖。
  • Table is full:MyISAM 超過 4GB/2TB 限制、或磁碟空間滿、或 myisam_max_sort_file_size 限制。
  • Prepared statement needs to be re-prepared:表結構變更導致預處理語句失效,重新準備即可。

五、快速診斷清單

  1. SHOW PROCESSLIST 看是否有大量 Sleep/Locked 連線。
  2. SHOW ENGINE INNODB STATUS 分析死鎖、鎖等待、Buffer Pool 狀態。
  3. EXPLAIN SELECT ... 確認執行計畫是否用到索引。
  4. SHOW GLOBAL STATUS LIKE 'Threads_%' 監控連線數趨勢。
  5. 檢查錯誤日誌、慢查詢日誌近期記錄。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved