本配置範例針對 4GB 記憶體、以 InnoDB 為主、連接數較少但隊列負載大的伺服器。可直接存為 /etc/my.cnf(全域)或 ~/.my.cnf(用戶級)。
[client]
port = 3306
socket = /tmp/mysql.sock
# password = your_password # 不建議明文寫密碼
[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 生效
thread_cache_size。ulimit -n。