| 模板 | 適用場景 |
|---|---|
| my-small.cnf | 內存 ≤64MB,MySQL 偶爾使用 |
| my-medium.cnf | 內存 32-64MB 主業務,或 128MB 混合部署 |
| my-large.cnf | 內存 512MB,專用數據庫服務器 |
| my-huge.cnf | 內存 1-2GB,專用高負載 |
| my-innodb-heavy-4G.cnf | 4GB 內存,純 InnoDB,少連接複雜查詢 |
使用方法:cp my-xxx.cnf /etc/my.cnf && service mysqld restart。但生產環境仍需根據實際指標微調。
SHOW VARIABLES;:查看當前生效參數SHOW STATUS;:查看運行時狀態計數器
# 模板建議
table_cache = 2048
open-files-limit = 4096 # [mysqld_safe] 區段
判斷:SHOW STATUS LIKE 'open_tables'; 若 Open_tables 接近 table_cache 且 Opened_tables 持續增長 → 需調大。
key_buffer_size = 32M # 不超 30% 內存,純 InnoDB 設 8-64M 供臨時表
判斷:Key_reads / Key_read_requests 比率。< 0.01(1%)為優,> 0.1 需調大。
query_cache_size = 64M
query_cache_type = 1 # 0=關,1=開,2=DEMAND
query_cache_limit = 1M # 單查詢上限
query_cache_min_res_unit = 4K # 分配最小單位
判斷:
Qcache_lowmem_prunes 大 → 緩存不足,調大Qcache_hits 大且命中率高 → 有效,繼續調大Qcache_hits 低 → 重複查詢少,關閉緩存反而更快(SQL_NO_CACHE 強制跳過)Qcache_free_blocks 碎片多 → 調小 query_cache_min_res_unit
innodb_buffer_pool_size = 2G # 關鍵,≥ 50% 內存
innodb_additional_mem_pool_size = 16M
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_flush_log_at_trx_commit = 1
innodb_thread_concurrency = 16
innodb_lock_wait_timeout = 120
其他參數(innodb_file_io_threads、innodb_log_buffer_size、innodb_max_dirty_pages_pct、innodb_flush_method)按模板微調即可,核心看 buffer_pool 與 flush_log 策略。
SHOW GLOBAL STATUS 關鍵指標EXPLAIN、慢查詢分析持續優化