MySQL 參數分為全域、會話兩個層級。動態修改(SET GLOBAL/SESSION)立即生效但重啟失效;配置檔修改需重啟但永久生效。本文整理修改方法、驗證方式與常見參數調整實例。
| 方式 | 語法 | 生效範圍 | 持久性 | 權限 |
|---|---|---|---|---|
| 全域動態 | SET GLOBAL var = val | 新連線 | 重啟失效 | SUPER |
| 會話動態 | SET SESSION var = val | 當前連線 | 斷線失效 | 無 |
| 配置檔 | my.cnf: var = val | 全域(重啟後) | 永久 | OS root |
SHOW VARIABLES LIKE 'max_connections';
SHOW GLOBAL VARIABLES LIKE 'sort_buffer_size';
SHOW SESSION VARIABLES LIKE 'sort_buffer_size';
SET GLOBAL max_connections = 2000;
-- 或
SET @@global.max_connections = 2000;
-- 驗證:需新連線
mysql -u root -p -e "SHOW VARIABLES LIKE 'max_connections';"
SET SESSION sort_buffer_size = 4194304;
-- 或
SET @@session.sort_buffer_size = 4194304;
-- 立即生效(當前連線)
SHOW VARIABLES LIKE 'sort_buffer_size';
# /etc/my.cnf
[mysqld]
max_connections = 2000
sort_buffer_size = 4M
innodb_buffer_pool_size = 4G
systemctl restart mysqld
# 查看全域值(配置檔生效後)
SHOW GLOBAL VARIABLES LIKE 'max_connections';
# 查看會話值(新連線繼承全域值)
SHOW SESSION VARIABLES LIKE 'max_connections';
| 參數 | 建議值 | 說明 |
|---|---|---|
max_connections | 1000-5000 | 視記憶體與並發數,Windows 上限 2048 |
innodb_buffer_pool_size | 物理記憶體 70-80% | InnoDB 核心緩衝,最關鍵參數 |
sort_buffer_size | 2M-8M | 每連線分配,過大導致 OOM |
join_buffer_size | 2M-8M | 無索引 JOIN 時使用 |
tmp_table_size | 64M-256M | 內存臨時表上限,超過轉磁碟 |
max_heap_table_size | 同 tmp_table_size | MEMORY 表上限 |
thread_cache_size | 100-500 | 減少線程創建開銷 |
table_open_cache | 2000-10000 | 配合 open_files_limit |
/etc/init.d/mysqld reload 不重讀 my.cnf 參數GLOBAL 只影響新連線,現有連線維持舊值version、datadir),不可動態修改
4. 生產環境先在測試環境驗證參數影響,再配置檔持久化
建立「動態驗證 → 配置檔固化 → 重啟確認」的標準化變更流程,確保參數調整安全可控。