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

MySQL 系統變數與 my.cnf 設定詳解:全域 vs Session、動態調整與權限

     編輯:MySQL 資料庫相關知識

系統變數分類

MySQL 4.0.3+ 維護兩類變數:

  • 全域變數:影響伺服器整體運作,啟動時由選項檔/命令列初始化,運行中可用 SET GLOBAL var=val 動態修改 (需 SUPER 權限)。
  • Session 變數:影響單一客戶端連線,連線建立時從對應全域變數複製初始值,客戶端可用 SET SESSION var=val 自行修改 (無特殊權限需求),僅影響自身連線。

變數生效範圍與可見性

  • 修改全域變數:對新連線立即生效 (其 Session 變數從新全域值初始化);現有連線的對應 Session 變數不變。
  • 修改 Session 變數:僅影響當前連線,其他連線完全不受影響。
  • 查看目前值:SHOW GLOBAL VARIABLES / SHOW SESSION VARIABLES / SHOW VARIABLES (預設 Session)。

設定來源優先序

  1. 命令列啟動參數 (最高)
  2. 選項檔 (my.cnf/my.ini)
  3. 編譯時預設值 (最低)

運行時 SET 修改優先於上述所有靜態來源,但重啟後失效,持久化必須寫入選項檔。

常見動態調整範例

-- 全域調整 (需 SUPER)
SET GLOBAL max_connections = 1000;
SET GLOBAL innodb_buffer_pool_size = 1073741824;  -- 1GB (5.7+ 支援動態)

-- Session 調整 (無特權)
SET SESSION sort_buffer_size = 4194304;
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

my.cnf 典型結構

[mysqld]
# 基礎路徑
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
socket = /tmp/mysql.sock

# 核心效能參數
innodb_buffer_pool_size = 4G
innodb_log_file_size = 512M
max_connections = 500
query_cache_type = 0  # 5.7+ 建議關閉

# 字元集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

[client]
default-character-set = utf8mb4
port = 3306
socket = /tmp/mysql.sock
關鍵提醒: 修改全域變數僅影響後續新連線;若需立即生效於現有連線,必須在各連線中執行對應的 SET SESSION。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved