| 維度 | 建議 | 理由 |
|---|---|---|
| 磁碟 I/O | RAID 10 (SAS/NVMe SSD) | 順序/隨機讀寫並重,RAID 5 寫入懲罰大,MySQL 不適合 |
| CPU | 雙路/多路 Xeon,高主頻 | MySQL 單查詢單線程,高主頻利於複雜查詢;多核利於並發 |
| 記憶體 | ≥ 32GB,建議 64GB+ | InnoDB Buffer Pool 越大越好,熱數據全內存 |
| 網路 | 萬兆內網,主從同機房 | 複寫/備份/集群通訊低延遲 |
[mysqld]
# 基礎
server-id = 1
port = 3306
socket = /tmp/mysql.sock
datadir = /data/mysql
basedir = /usr/local/mysql
user = mysql
skip-name-resolve
skip-external-locking
# 連線
max_connections = 2000
max_connect_errors = 1000000
back_log = 1024
thread_cache_size = 256
thread_concurrency = 32
# InnoDB 核心(佔用 70% 記憶體 ≈ 44GB)
innodb_buffer_pool_size = 44G
innodb_buffer_pool_instances = 8
innodb_file_per_table = 1
innodb_open_files = 4000
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 2G
innodb_log_files_in_group = 3
innodb_log_buffer_size = 64M
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_thread_concurrency = 0
innodb_flush_method = O_DIRECT
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
# 緩衝區(每連線,總量 = 值 × max_connections)
sort_buffer_size = 4M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
join_buffer_size = 4M
# 表快取
table_open_cache = 4000
table_definition_cache = 2000
# Binlog
log_bin = mysql-bin
binlog_format = ROW
binlog_cache_size = 32M
max_binlog_size = 1G
expire_logs_days = 7
sync_binlog = 1 # 主庫安全優先
# 慢查詢
slow_query_log = 1
long_query_time = 0.5
slow_query_log_file = /data/mysql/slow.log
# 其它
tmp_table_size = 256M
max_heap_table_size = 256M
key_buffer_size = 64M # 僅用於 MyISAM 臨時表/系統表
query_cache_size = 0
query_cache_type = 0
wait_timeout = 600
interactive_timeout = 600
| 場景 | 推薦引擎 | 理由 |
|---|---|---|
| 高並發讀寫、事務、外鍵、行鎖 | InnoDB | ACID、MVCC、行級鎖、崩潰恢復 |
| 純讀/極少寫、全文檢索(5.6前)、壓縮表 | MyISAM | 表鎖、無事務、全文索引早期優勢 |
| 日誌/統計/非關鍵可丟失數據 | MyISAM / Archive | 插入快、空間小 |
現代架構建議:全 InnoDB。5.6+ InnoDB 支援全文索引、壓縮、線上 DDL,無理由再用 MyISAM。
innodb_log_file_size 設 1~4GB,減少 Checkpoint 沖刷衝擊。sync_binlog=1, innodb_flush_log_at_trx_commit=1;從庫可設 0/2 提速。slave_parallel_workers、slave_parallel_type=LOGICAL_CLOCK。thread_cache_size 只作服務端緩衝。query_cache_size=0,鎖競爭殺手。「幾百 TB 總量、日均 10 億+ PV 動態頁、單庫峰值 9000 萬查詢/天,整體負載 0.5~1.0。核心策略:分庫分表分散壓力、一主多從讀寫分離、Redis 緩存層吸收 95%+ 讀請求、全 InnoDB、SSD RAID10、Buffer Pool 佔 70% 記憶體、Log File 2GB、參數按上述模板調優。MyISAM 早已淘汰。」