首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 主配置檔 my.cnf 參數詳細中文註釋版(4GB 記憶體、InnoDB 為主)

     編輯:MySQL 綜合教學

MySQL my.cnf 核心參數完整中文註釋版(適用 4GB RAM、InnoDB 主力、高併發隊列場景)

本配置範例針對 4GB 記憶體、以 InnoDB 為主、連接數較少但隊列負載大的伺服器。可直接存為 /etc/my.cnf(全域)或 ~/.my.cnf(用戶級)。

[client] 客戶端通用

[client]
port = 3306
socket = /tmp/mysql.sock
# password = your_password  # 不建議明文寫密碼

[mysqld] 核心伺服器參數

[mysqld]
port = 3306
socket = /tmp/mysql.sock

# 連接隊列長度,高併發連接報 "connection refused" 時調大
back_log = 50

# 最大連接數(含 1 個保留給 SUPER 權限管理員)
max_connections = 100

# 同一主機連接錯誤上限,超過則封鎖直到 FLUSH HOSTS
max_connect_errors = 10

# 表快取數量,影響檔案描述符用量,配合 open-files-limit
table_cache = 2048

# 封包大小上限(處理大 BLOB/長 SQL 必調大)
max_allowed_packet = 16M

# Binlog 事務快取(大事務多時調大)
binlog_cache_size = 1M

# 記憶體表大小上限(防止意外佔滿記憶體)
max_heap_table_size = 64M

# 排序緩衝(ORDER BY/GROUP BY),每連接獨立分配
sort_buffer_size = 8M

# 聯結緩衝(全表掃描 JOIN),每連接獨立分配
join_buffer_size = 8M

# 執行緒快取(減少頻繁建立/銷毀執行緒開銷)
thread_cache_size = 8

# 併發提示(僅 Solaris 等支援 thread_concurrency() 的 OS 有效)
thread_concurrency = 8

# 查詢快取(適用「讀多寫少、重複查詢多」場景)
query_cache_size = 64M
query_cache_limit = 2M

# 全文索引最小詞長(修改後需 REPAIR TABLE 重建索引)
ft_min_word_len = 4

# 預設儲存引擎
default_table_type = MYISAM

# 執行緒堆疊大小
thread_stack = 192K

# 事務隔離等級
transaction_isolation = REPEATABLE-READ

# 內部臨時表大小上限(超過自動轉磁碟表)
tmp_table_size = 64M

# 啟用 Binlog(主從複制、時間點恢復必開)
log-bin = mysql-bin

# 慢查詢日誌
log_slow_queries
long_query_time = 2
log_long_format

# 臨時檔案目錄(可指定多個目錄輪詢,建議放 tmpfs)
# tmpdir = /tmp

# ===== 複制相關 =====
server-id = 1  # 主庫唯一 ID,1 ~ 2^32-1

# 從庫配置範例(啟用時取消註釋)
# server-id = 2
# master-host = 
# master-user = 
# master-password = 
# master-port = 3306
# read_only  # 從庫唯讀保護

# ===== MyISAM 專用 =====
key_buffer_size = 32M          # 索引塊快取(≤ 物理記憶體 30%)
read_buffer_size = 2M          # 全表掃描緩衝
read_rnd_buffer_size = 16M     # 排序後讀取緩衝(提升 ORDER BY)
bulk_insert_buffer_size = 64M  # 批次插入優化
myisam_sort_buffer_size = 128M # 索引重建排序緩衝
myisam_max_sort_file_size = 10G
myisam_max_extra_sort_file_size = 10G
myisam_repair_threads = 1      # 多核可調大
myisam_recover                 # 啟動自動修復損壞 MyISAM 表

# ===== InnoDB 專用(核心) =====
innodb_additional_mem_pool_size = 16M   # 中繼資料池
innodb_buffer_pool_size = 2G            # 核心:資料+索引快取,建議物理記憶體 70-80%(專用機)
innodb_data_file_path = ibdata1:10M:autoextend
# innodb_data_home_dir = /path/to/data
innodb_file_io_threads = 4              # IO 執行緒(Unix 固定 4,Windows 可調大)
# innodb_force_recovery = 1             # 損壞救援時啟用
innodb_thread_concurrency = 16          # 內部併發執行緒上限
innodb_flush_log_at_trx_commit = 1      # 1=完整 ACID(每提交刷盤),0/2=犧牲安全換效能
# innodb_fast_shutdown                  # 快速關閉(延後清理到下次啟動)
innodb_log_buffer_size = 8M             # 日誌緩衝
innodb_log_file_size = 256M             # 單個日誌檔大小(總量建議 25%-100% buffer pool)
innodb_log_files_in_group = 3           # 日誌檔組數(通常 2-3)
# innodb_log_group_home_dir = /path/to/logs
innodb_max_dirty_pages_pct = 90         # 髒頁比例上限(觸發刷盤)
# innodb_flush_method = O_DSYNC         # 刷盤模式(fdatasync/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 -n 生效

關鍵參數調優口訣

  • innodb_buffer_pool_size:專用機設物理記憶體 70-80%,是效能第一關鍵。
  • innodb_flush_log_at_trx_commit=1:資料安全第一選擇;極致寫入效能可設 2,接受極小概率丟失 1 秒資料。
  • innodb_log_file_size:調大減少 checkpoint 刷盤頻率,但會拉長崩潰恢復時間。
  • max_connections:視應用連接池大小設定,配合 thread_cache_size。
  • open-files-limit:大表、高併發必調大,且需同步調整系統 ulimit -n。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved