默認 max_connections = 100,實際併發超過限制。常見誘因:
close())
# /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';
net stop mysql
net start mysql
| 問題模式 | 優化手段 |
|---|---|
| PHP 短連接風暴 | 改用持久連接 mysql_pconnect / 連接池 |
| Java 池洩漏 | 檢查 finally 塊關閉、配置 testOnBorrow |
| 事務過長佔用連接 | 縮小事務範圍、啟用 Spring @Transactional 管理 |
| 批量任務併發過高 | 限流、分批、異步隊列 |
#!/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 修改後無法啟動修改后必須:
service mysql stopdatadir 下 ib_logfile0, ib_logfile1...service mysql start