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

MySQL max_connections 修改四大法:配置檔、執行期、啟動參數、原始碼編譯

     編輯:MySQL 資料庫相關知識

現狀

預設 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  |
+-----------------+-------+

注意:重啟後失效,需配合方法一持久化。

方法三:mysqld_safe 啟動參數 (舊版/特殊部署)

# 編輯 /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_limit65535OS 開檔上限,ulimit -n 同步調大
table_open_cache4096+表快取,避免頻繁開關表
thread_cache_size100+執行緒快取,減少建立銷毀
back_log200+TCP 連線佇列
innodb_buffer_pool_size記憶體 60-80%核心效能參數

監控與告警

# 當前連線使用率
SHOW STATUS LIKE 'Threads_connected';
SHOW VARIABLES LIKE 'max_connections';
# 使用率 > 80% 告警

# 連線錯誤計數
SHOW GLOBAL STATUS LIKE 'Connection_errors%';

上限參考

  • 理論最大:16384 (源碼定義)
  • 實際受限:OS 檔案描述符、記憶體、CPU、執行緒調度
  • 生產常見:2000-5000,極高併發配合連線池、ProxySQL 分流
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved