預設 max_connections = 151 (5.7+) / 100 (舊版),高併發場景極易耗盡報 Too many connections。
# /etc/my.cnf 或 /etc/mysql/my.cnf
[mysqld]
max_connections = 2000
systemctl restart mysqld
mysql> SET GLOBAL max_connections = 2000;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 2000 |
+-----------------+-------+
注意:重啟後失效,需配合方法一持久化。
# 編輯 /usr/local/mysql/bin/mysqld_safe
# 找到 mysqld 啟動行,追加:
-O max_connections=1500
# 範例位置:
$NOHUP_NICENESS $ledir/$MYSQLD \
$defaults --basedir=$MY_BASEDIR_VERSION \
--datadir=$DATADIR $USER_OPTION \
--pid-file=$pid_file \
--skip-external-locking \
-O max_connections=1500 \
>> $err_log 2>&1
# sql/mysqld.cc
{"max_connections", OPT_MAX_CONNECTIONS,
"The number of simultaneous clients allowed.",
(gptr*) &max_connections, (gptr*) &max_connections,
0, GET_ULONG, REQUIRED_ARG, 1500, 1, 16384, 0, 1, 0},
修改第 10 個參數 (預設值) 從 100/151 改為目標值,重新 cmake && make && make install。
| 參數 | 建議值 | 說明 |
|---|---|---|
| open_files_limit | 65535 | OS 開檔上限,ulimit -n 同步調大 |
| table_open_cache | 4096+ | 表快取,避免頻繁開關表 |
| thread_cache_size | 100+ | 執行緒快取,減少建立銷毀 |
| back_log | 200+ | TCP 連線佇列 |
| innodb_buffer_pool_size | 記憶體 60-80% | 核心效能參數 |
# 當前連線使用率
SHOW STATUS LIKE 'Threads_connected';
SHOW VARIABLES LIKE 'max_connections';
# 使用率 > 80% 告警
# 連線錯誤計數
SHOW GLOBAL STATUS LIKE 'Connection_errors%';