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

MySQL 設定檔詳解與效能調優入門

     編輯:MySQL 資料庫相關知識

前言

MySQL 行為由 my.cnf(Linux)或 my.ini(Windows)控制。官方提供五組預設範本,依記憶體與負載選擇。本文逐段解析預設 /etc/my.cnf 結構、五大範本差異與關鍵參數調整方向。

一、五大官方範本對照

檔案適用場景建議記憶體關鍵預設值
my-small.cnf嵌入式/測試,< 100 連線≤ 64MBkey_buffer=16K, table_cache=4
my-medium.cnf中型應用,共用主機128-256MBkey_buffer=16M, table_cache=64, sort_buffer=512K
my-large.cnf專用 DB 伺服器512MB-1GBkey_buffer=256M, table_cache=256, myisam_sort_buffer=8M, log-bin
my-huge.cnf企業級高負載專用機≥ 1-2GBkey_buffer=384M, table_cache=512, read_buffer=2M, write_buffer=2M
my-innodb-heavy-4G.cnf (5.5+)InnoDB 專用大記憶體≥ 4GBinnodb_buffer_pool_size=2G, innodb_log_file_size=256M

使用方式:cp /usr/share/mysql/my-medium.cnf /etc/my.cnf 後再微調。

二、預設 /etc/my.cnf 結構解析

[client]
port=3306
socket=/var/lib/mysql/mysql.sock

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# skip-innodb          # 未用 InnoDB 時啟用
# 默認無 key_buffer_size 等效能參數,需自行添加

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
  • [client]:所有客戶端工具(mysql、mysqldump)共用連線參數。
  • [mysqld]:Server 核心參數區,效能調優主戰場。
  • [mysqld_safe]:啟動腳本 mysqld_safe 讀取的日誌/ PID 設定。

三、效能關鍵參數分類速查

1. 連線與執行緒

  • max_connections:最大連線數(預設 151,依 Max_used_connections 調整)。
  • thread_cache_size:執行緒複用池(預設 0,建議 32-64)。
  • back_log:TCP 監聽隊列長度(高併發衝刺時調大,受 OS somaxconn 限制)。

2. 緩衝區與快取(全域)

  • key_buffer_size:MyISAM 索引快取(InnoDB 主力請改調 innodb_buffer_pool_size)。
  • query_cache_size / query_cache_type:查詢快取(高寫入建議關閉,MySQL 8.0 已移除)。
  • table_open_cache:表快取上限(配合 Open_tables/Opened_tables 調整)。

3. 連線級緩衝區(每連線獨佔,慎調大)

  • sort_buffer_size:排序緩衝(預設 256K,複雜 ORDER BY 可調 1-2M)。
  • read_buffer_size:全表掃描緩衝(預設 128K,建議 ≤ 8M)。
  • read_rnd_buffer_size:排序後隨機讀緩衝。
  • join_buffer_size:無索引 JOIN 緩衝(預設 256K,調大慎重)。
  • tmp_table_size / max_heap_table_size:記憶體臨時表上限(必須同調)。

4. InnoDB 專屬(現代主流)

  • innodb_buffer_pool_size:最關鍵參數,建議實體記憶體 60-80%。
  • innodb_log_file_size:Redo Log 大小(大寫入量調大 256M-1G,重啟才生效)。
  • innodb_flush_log_at_trx_commit:1=最安全、2=高效能、0=最高效能但可能丟 1 秒資料。
  • innodb_file_per_table:獨立表空間(ON 便於管理、回收空間)。

5. 日誌與複寫

  • log_bin、binlog_format=ROW、expire_logs_days=7、max_binlog_size=1G。
  • slow_query_log=1、long_query_time=1、log_queries_not_using_indexes=1。
  • gtid_mode=ON、enforce_gtid_consistency=ON(現代複寫必備)。

四、字元集最佳實踐

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

避免 latin1 導致中文/Emoji 亂碼。

五、調優工作流

  1. 選最接近硬體規格的範本複製為 /etc/my.cnf。
  2. 啟用慢查詢日誌、log_queries_not_using_indexes。
  3. 穩定運行 1-7 天,收集 SHOW GLOBAL STATUS 基準線。
  4. 針對單一瓶頸微調一個參數,觀察至少 30 分鐘。
  5. 定期 mysqldumpslow 分析慢查詢,優化 SQL/索引優於調參數。

總結

設定檔是 MySQL 行為的基因。理解五大範本定位、掌握核心參數分類、建立「監控→調整→驗證」閉環,才是持續優化的正途。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved