針對 4GB 內存、純 InnoDB、高併發隊列、少量連接場景的 my.ini/my.cnf 完整註釋版,每項含作用、建議值、調優方向。
文件結構
[client] # 客戶端默認參數
[mysqld] # 服務端核心參數(最長)
[mysqldump] # 導出工具參數
[mysql] # 交互式客戶端參數
[isamchk] # MyISAM 檢查工具
[myisamchk] # MyISAM 維護工具
[mysqlhotcopy] # 熱備工具
[mysqld_safe] # 啟動腳本參數
[mysqld] 核心參數精選(按功能分組)
連接與線程
| 參數 | 默認 | 建議(4GB) | 說明 |
max_connections | 151 | 500-1000 | 配合 thread_cache_size |
thread_cache_size | 0 | 50-100 | 減少線程創建開銷 |
back_log | 80 | 200 | 監聽隊列長度 |
max_connect_errors | 100 | 10000 | 防誤封,配合 FLUSH HOSTS |
內存與緩衝
| 參數 | 默認 | 建議(4GB) | 說明 |
innodb_buffer_pool_size | 128M | 2-3G (70% 物理內存) | 核心!數據+索引熱點 |
innodb_log_buffer_size | 8M | 16-64M | 大事務減少刷盤 |
innodb_log_file_size | 48M | 256M-1G | 總大小≈buffer_pool 25% |
innodb_log_files_in_group | 2 | 3 | 循環寫入 |
sort_buffer_size | 256K | 2-8M | 每線程,排序/GROUP BY |
join_buffer_size | 256K | 2-8M | 每線程,全表掃描 JOIN |
read_rnd_buffer_size | 256K | 4-16M | 每線程,排序後隨機讀 |
tmp_table_size | 16M | 64-256M | 內存臨時表上限 |
max_heap_table_size | 16M | 64-256M | 用戶創建 MEMORY 表上限 |
InnoDB 專屬
| 參數 | 建議 | 關鍵點 |
innodb_flush_log_at_trx_commit | 2 | 1=最安全,2=高性能(丟 1s),0=最高性能(丟事務) |
innodb_file_per_table | ON | 獨立 .ibd,便於回收空間、遷移 |
innodb_thread_concurrency | 0 (自動) | 高併發可設 2×CPU 核心 |
innodb_lock_wait_timeout | 50 | 死鎖等待秒數 |
innodb_max_dirty_pages_pct | 90 | 髒頁刷盤閾值 |
查詢緩存(高寫入建議關閉)
query_cache_type = OFF
query_cache_size = 0
日誌與複製
log-bin = mysql-bin # 主庫必開
server-id = 1 # 唯一
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1 # 秒,建議 0.5-1
log_queries_not_using_indexes = 1
修改 innodb_log_file_size 避坑
systemctl stop mysqld
rm /var/lib/mysql/ib_logfile*
- 修改配置
systemctl start mysqld
驗證配置生效
mysql -uroot -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
mysql -uroot -p -e "SHOW ENGINE INNODB STATUS\G" | head -30