源自 MySQL Performance Blog 實戰經驗,精簡數百參數為 10 項核心配置,涵蓋 InnoDB 核心、連線、快取、日誌、複制等關鍵面向,調整前請遵循「一次只改一項、運行時動態驗證、永久生效寫入配置檔」原則。
儲存資料與索引頁,越大越好,減少磁碟 IO。
innodb_buffer_pool_size=6G
影響寫入效能與崩潰恢復速度。MySQL 5.5+ 崩潰恢復大幅優化,可設較大值。
innodb_log_file_size=1G
innodb_log_files_in_group=2
修改步驟:停庫 → 移除舊 ib_logfile* → 修改配置 → 啟庫。
預設 151 易觸發 "Too many connections"。
thread_pool(Percona/MariaDB)max_connections=2000
ON(5.6+ 預設):每表一個 .ibd,支援 DROP/TRUNCATE 回收空間、壓縮、可傳輸表空間。OFF:共享表空間 ibdata1,空間難回收。innodb_file_per_table=1
| 值 | 行為 | 適用場景 |
|---|---|---|
| 1(預設) | 每次提交 fsync 寫入 redo log | 主庫、核心業務、資料安全優先 |
| 2 | 提交寫入 OS cache,每秒 fsync | 從庫、可容忍 1 秒資料丟失 |
| 0 | 提交僅寫入 OS cache,每秒 fsync | 測試環境、極高寫入、可接受丟失 |
O_DIRECT 避免雙重緩衝fdatasync(預設)sysbench 實測決定Innodb_log_waits ≠ 0 時調大(如 8MB-64MB)0),5.7 棄用,8.0 移除query_cache_size=0
query_cache_type=0
server_id 唯一值expire_logs_days 自動清理、max_binlog_size 限制單檔大小log_bin=mysql-bin
binlog_format=ROW
server_id=1
expire_logs_days=7
max_binlog_size=100M
GRANT 僅能用 IP,不支援主機名skip_name_resolve=1
/etc/my.cnf 或 /etc/mysql/my.cnf)[mysqld] 區段SET GLOBAL 即時生效驗證Innodb_buffer_pool_reads、Threads_connected、Slow_queries、Qcache_hits(如開啟)