萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 參數動態修改與持久化完整指南:SET GLOBAL vs SET SESSION vs my.cnf

MySQL 參數分為全域、會話兩個層級。動態修改(SET GLOBAL/SESSION)立即生效但重啟失效;配置檔修改需重啟但永久生效。本文整理修改方法、驗證方式與常見參數調整實例。

三種修改方式對照

方式語法生效範圍持久性權限
全域動態SET GLOBAL var = val新連線重啟失效SUPER
會話動態SET SESSION var = val當前連線斷線失效無
配置檔my.cnf: var = val全域(重啟後)永久OS root

實戰操作流程

1. 查看當前值

SHOW VARIABLES LIKE 'max_connections';
SHOW GLOBAL VARIABLES LIKE 'sort_buffer_size';
SHOW SESSION VARIABLES LIKE 'sort_buffer_size';

2. 動態修改全域參數

SET GLOBAL max_connections = 2000;
-- 或
SET @@global.max_connections = 2000;

-- 驗證:需新連線
mysql -u root -p -e "SHOW VARIABLES LIKE 'max_connections';"

3. 動態修改會話參數

SET SESSION sort_buffer_size = 4194304;
-- 或
SET @@session.sort_buffer_size = 4194304;

-- 立即生效(當前連線)
SHOW VARIABLES LIKE 'sort_buffer_size';

4. 配置檔持久化

# /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_connections1000-5000視記憶體與並發數,Windows 上限 2048
innodb_buffer_pool_size物理記憶體 70-80%InnoDB 核心緩衝,最關鍵參數
sort_buffer_size2M-8M每連線分配,過大導致 OOM
join_buffer_size2M-8M無索引 JOIN 時使用
tmp_table_size64M-256M內存臨時表上限,超過轉磁碟
max_heap_table_size同 tmp_table_sizeMEMORY 表上限
thread_cache_size100-500減少線程創建開銷
table_open_cache2000-10000配合 open_files_limit

避坑指南

  • /etc/init.d/mysqld reload 不重讀 my.cnf 參數
  • 動態修改 GLOBAL 只影響新連線,現有連線維持舊值
  • 3. 部分參數為唯讀(如 version、datadir),不可動態修改 4. 生產環境先在測試環境驗證參數影響,再配置檔持久化

建立「動態驗證 → 配置檔固化 → 重啟確認」的標準化變更流程,確保參數調整安全可控。

copyright © 萬盛學電腦網 all rights reserved