MySQL 可調參數超百個,但**改動 20% 參數解決 80% 問題**。本文精選新安裝必調的 10 項核心配置,涵蓋 InnoDB 核心、連線、查詢快取、二進位日誌、DNS 解析,附單位陷阱、修改驗證與漸進式調優原則。
鐵律:一次只改一項、運行時 SET GLOBAL 驗證、配置檔永久生效、重啟驗證、建立基準線對比。
innodb_buffer_pool_size=6Gib_logfile*、重啟Too many connectionsON:每表獨立 .ibd,支援 DROP/TRUNCATE 回收空間、壓縮、可攜式表空間OFF:共享表空間 ibdata1,無法回收空間| 值 | 行為 | 適用場景 |
|---|---|---|
| 1 (預設) | 每次 Commit fsync 到 Redo Log,**完整 ACID** | 主庫、核心業務 |
| 2 | Commit 寫 OS Cache,每秒 fsync,**可能丟 1 秒** | 從庫、可容忍秒級遺失 |
| 0 | 不主動 fsync,完全依賴 OS,**可能丟資料** | 極高效能、可重建資料場景 |
O_DIRECT (繞過 OS Cache,減少雙重快取)fsync (預設,安全)sysbench 實測決定Innodb_log_waits > 0 時調大至 8-64MBquery_cache_type=0、query_cache_size=0log_bin=mysql-bin、server_id=1 (唯一)expire_logs_days=7 自動清理max_binlog_size=100M 控制單檔大小GRANT 僅能用 IP、SHOW PROCESSLIST Host 顯示 IP[mysqld]
# 基礎
basedir=/usr/local/mysql
datadir=/data/mysql
port=3306
server_id=1
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# InnoDB 核心
innodb_buffer_pool_size=6G
innodb_log_file_size=1G
innodb_log_buffer_size=16M
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
innodb_file_per_table=ON
# 連線
max_connections=1000
skip_name_resolve=1
# Binlog
log_bin=mysql-bin
expire_logs_days=7
max_binlog_size=100M
binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON
# 查詢快取關閉
query_cache_type=0
query_cache_size=0
# 其他
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
explicit_defaults_for_timestamp=1
systemctl restart mysqldtail -f /var/log/mysqld.logSHOW VARIABLES LIKE 'innodb_buffer_pool_size';sysbench / tpcc-mysql 基準測試,建立效能基線避坑提醒:單位錯誤 (如innodb_buffer_pool_size=6會被視為 6 位元組)、重複參數 (後蓋前)、區段錯誤 (寫在[client]區)、編碼非 UTF-8 導致解析失敗。