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

MySQL 常見故障診斷與連接錯誤排查手冊

     編輯:MySQL 綜合教學

核心診斷思路:先分清是 Server 掛了,還是 Client 連不上


# 檢查進程存活
ps aux | grep mysqld
# 檢查運行時長
mysqladmin version
# 查看錯誤日志 (關鍵!)
tail -f /var/lib/mysql/$(hostname).err

高頻錯誤碼與解決方案

1. "MySQL server has gone away"

原因:

  • 連接超時被 Server 主動斷開 (默認 wait_timeout=8h,連接空閒超時)
  • 數據包過大或異常 (max_allowed_packet 限制)

解決:

  • 應用層使用連接池 + 心跳檢測 (如 HikariCP keepaliveTime、Druid validationQuery)
  • 調大 wait_timeout、interactive_timeout、max_allowed_packet (如 64M)
  • 檢查長事務/大查詢導致的阻塞

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

排查清單:

  1. 服務是否運行:systemctl status mysql / service mysql status
  2. Socket 文件路徑是否匹配:mysqladmin --socket=/var/run/mysqld/mysqld.sock version
  3. 端口是否監聽:netstat -tlnp | grep 3306 / ss -tlnp | grep 3306
  4. 防火牆/安全組是否放行
  5. bind-address 配置是否正確 (0.0.0.0 或具體 IP)

連接測試矩陣:


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

3. "Host '...' is blocked because of many connection errors"

機制:連續 max_connect_errors (默認 10) 次中斷連接嘗試後,Server 認為受攻擊,拉黑該 Host。

解封:


mysqladmin flush-hosts
# 或重啟 MySQL (不推薦)

根治**:

  • 修復導致連接中斷的根因 (網絡抖動、客戶端代碼異常退出、連接池配置不當)
  • 調大 max_connect_errors (如 100000),但治標不治本
  • 開啟 skip-name-resolve 避免 DNS 解析失敗導致的誤判

預防性運維建議

  • 監控 Aborted_connects、Connection_errors_xxx 狀態變量
  • 應用層統一使用成熟連接池,配置驗證查詢、空閒回收、最大生命週期
  • 定期演練故障注入 (網絡分區、Server 重啟),驗證客戶端重連韌性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved