InnoDB 核心參數配置模板
# *** INNODB 相關選項 ***
# 不用 InnoDB 可關閉節省資源
# skip-innodb
# 元數據內存池
innodb_additional_mem_pool_size = 16M
# 核心緩衝池(數據+索引),專用庫建議 70-80% 物理內存
innodb_buffer_pool_size = 2G
# 表空間文件:自動擴展
innodb_data_file_path = ibdata1:10M:autoextend
# innodb_data_home_dir = /other/path
# IO 線程數(Unix 硬編碼 4,Windows 可調大)
innodb_file_io_threads = 4
# 損壞恢復嘗試(1-6 遞增)
# innodb_force_recovery = 1
# 核心併發線程數
innodb_thread_concurrency = 16
# 事務日志刷盤策略:1=完全ACID,0/2=高性能犧牲部分安全
innodb_flush_log_at_trx_commit = 1
# 加速關閉(禁用全清理+插入緩衝合併)
# innodb_fast_shutdown
# 日志緩衝區
innodb_log_buffer_size = 8M
# 日志文件大小:建議 25%-100% buffer_pool,過大延長恢復時間
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
# 日志文件目錄(可放獨立磁盤/RAID1)
# innodb_log_group_home_dir = /path/to/logs
# 髒頁比例上限,觸發積極刷盤
innodb_max_dirty_pages_pct = 90
# 刷盤方式:fdatasync(默認) / O_DSYNC
# innodb_flush_method = O_DSYNC
# 鎖等待超時(秒)
innodb_lock_wait_timeout = 120
配套工具段配置
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# safe-updates
[isamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[myisamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 8192 # 需系統 ulimit 配合
關鍵參數調優心法
- innodb_buffer_pool_size:最重要,盡量大,至少 50% 內存
- innodb_flush_log_at_trx_commit:1 最安全,高併寫可設 2(秒級丟失風險)
- innodb_log_file_size:大減少 checkpoint 頻率,但增大恢復時間,256M-1G 常見
- innodb_thread_concurrency:0 表示不限(新版默認),舊版建議 2*(CPU核心+磁盤數)
- innodb_file_io_threads:Linux 保持 4,Windows 可調 8-16
- open-files-limit:配合系統
ulimit -n 65535,防「Too many open files」