編譯安裝只是基礎,my.cnf 參數調校才是發揮硬體效能的關鍵。本文詳解配置檔層級、預設範本選擇、參數查詢方法與核心參數設定實戰。
| 層級 | 路徑 | 影響範圍 |
|---|---|---|
| 全域 | /etc/my.cnf 或 /etc/mysql/my.cnf | 該主機所有 MySQL 實例 |
| 實例 | [mysql-install-dir]/var/my.cnf(即 datadir 下) | 單一實例 |
| 用戶 | ~/.my.cnf | 當前用戶啟動的客戶端/實例 |
MySQL 讀取順序:全域 → 實例 → 用戶,後者覆蓋前者同名參數。
源碼包 support-files/ 提供四種範本:
| 檔案 | 適用場景 | 記憶體建議 |
|---|---|---|
| my-small.cnf | 嵌入式、開發機、< 64MB 記憶體 | 極小資源佔用 |
| my-medium.cnf | 中小型網站、128-256MB | 平衡 |
| my-large.cnf | 大型應用、512MB-1GB | 較大緩衝區 |
| my-huge.cnf | 企業級核心業務、2GB+ | 激進大緩衝、高併發 |
操作:cp my-large.cnf /etc/my.cnf 並根據實際硬體微調。
/usr/local/mysql/libexec/mysqld --help --verbose 2>&1 | head -300
關鍵區塊在 Possible variables for option --set-variable (-O) are 之後,列出所有 set-variable = 參數=值 可用名稱。
[mysqld]
# 基礎
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
socket = /tmp/mysql.sock
# 連線層
max_connections = 500
max_connect_errors = 10000
wait_timeout = 300
interactive_timeout = 600
# 緩衝區核心(InnoDB 為主)
innodb_buffer_pool_size = 4G # 物理記憶體 60-70%
innodb_log_file_size = 512M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1 # ACID 嚴格
innodb_file_per_table = 1
# 查詢快取(5.7+ 已棄用,8.0 移除)
# query_cache_type = 0
# query_cache_size = 0
# 臨時表與排序
tmp_table_size = 64M
max_heap_table_size = 64M
sort_buffer_size = 4M
read_rnd_buffer_size = 4M
# 日誌
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
# 安全
skip-name-resolve
sql_mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
my.cnf。systemctl restart mysqld 重啟服務(動態參數可 SET GLOBAL 但重啟後失效)。SHOW VARIABLES LIKE 'innodb_buffer_pool_size';innodb_buffer_pool_size、max_connections、slow_query_log 三大項。MySQLTuner、Percona Toolkit 自動分析建議。