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

解決 MySQL "Too many connections" 1040 錯誤的多維方案

     編輯:MySQL 資料庫相關知識

錯誤根因

默認 max_connections = 100,實際併發超過限制。常見誘因:

  1. 應用連接池配置過大 > MySQL 上限
  2. 長連接未釋放(未調用 close())
  3. 慢查詢堆積佔用連接槽
  4. 連接泄漏(異常分支未歸還連接)

方案一:調大 MySQL 最大連接數

修改配置文件(永久)


# /etc/my.cnf 或 /etc/mysql/my.cnf
[mysqld]
max_connections = 1000
# 配套調大(防止文件描述符不足)
open_files_limit = 65535

動態調整(臨時,重啟失效)


SET GLOBAL max_connections = 1000;
SHOW VARIABLES LIKE 'max_connections';

Windows 下修改 my.ini 同理,重啟服務生效


net stop mysql
net start mysql

方案二:應用層優化(治本)

問題模式優化手段
PHP 短連接風暴改用持久連接 mysql_pconnect / 連接池
Java 池洩漏檢查 finally 塊關閉、配置 testOnBorrow
事務過長佔用連接縮小事務範圍、啟用 Spring @Transactional 管理
批量任務併發過高限流、分批、異步隊列

方案三:架構層面

  • 讀寫分離:主庫寫、從庫讀,分攤連接壓力
  • ProxySQL:連接多路複用、緩存、限流
  • 拆分業務庫:微服務各用各的庫,隔離故障域

排查腳本(定時巡檢)


#!/bin/bash
# 監控連接數佔用率
usage=$(mysql -e "SHOW STATUS LIKE 'Threads_connected';" -sN | awk '{print $2}')
max=$(mysql -e "SHOW VARIABLES LIKE 'max_connections';" -sN | awk '{print $2}')
pct=$((usage*100/max))
if [ $pct -gt 80 ]; then
    echo "ALERT: Connection usage ${pct}%" | mail -s "MySQL Conn Alert" ops@domain.com
fi

關聯參數:innodb_log_file_size 修改後無法啟動

修改后必須:

  1. service mysql stop
  2. 刪除 datadir 下 ib_logfile0, ib_logfile1...
  3. service mysql start
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved