/etc/my.cnf (影響所有實例)$MYSQL_BASE/var/my.cnf (單實例覆蓋)~/.my.cnf (客戶端預設參數)啟動時讀取順序:全域 → 實例 → 用戶,後者覆蓋前者。
| 範本 | 適用場景 | 記憶體建議 | 核心參數特徵 |
|---|---|---|---|
| my-small.cnf | 嵌入式/開發測試、<64MB RAM | < 64MB | 最小緩衝區、關閉查詢快取 |
| my-medium.cnf | 中小型網站、128-512MB RAM | 128-512MB | 適度 key_buffer、table_cache |
| my-large.cnf | 大型應用、512MB-2GB RAM | 1-2GB | 大 key_buffer、sort_buffer、thread_cache |
| my-huge.cnf | 核心業務、>2GB RAM、專用 DB Server | >2GB | 最大化緩衝區、InnoDB 專用參數 |
key_buffer_size:MyISAM 索引塊快取 (建議 25%-50% RAM,但留給 OS/InnoDB)。table_open_cache (舊 table_cache):開啟表快取數,避免頻繁開關表 (建議 max_connections * N)。thread_cache_size:執行緒快取,減少建立/銷毀開銷 (建議 50-100)。max_connections:最大連線數 (預設 151),配合 thread_cache。max_allowed_packet:單次封包上限 (建議 16M-64M),防大欄位截斷。sort_buffer_size、read_buffer_size、join_buffer_size:每連線分配,不可過大 (總和 × max_connections 可能爆 RAM),建議 1-4MB。innodb_buffer_pool_size:最關鍵參數,建議 70-80% 實體記憶體 (專用 DB)。innodb_log_file_size:Redo Log 大小 (建議 256M-1G),大則恢復久、小則頻繁 checkpoint。innodb_flush_log_at_trx_commit:1=最安全(預設)、2=高效能(秒級丟失)、0=最高效(崩潰丟失)。innodb_file_per_table:ON (獨立表空間,利於空間回收與遷移)。query_cache_type=0、query_cache_size=0 關閉,避免鎖競爭。# 檢查語法
mysqld --help --verbose 2>&1 | head -20
# 或
mysqld --validate-config
# 線上動態調整 (部分參數)
SET GLOBAL sort_buffer_size = 4194304;
# 永久生效需寫入 my.cnf 並重啟