1GB 內存服務器,高併發訪問導致頻繁死機/卡頓。MySQL 伸縮性強,合理配置可在有限內存下榨取最大性能。
/usr/local/mysql/share/mysql/my-{huge,large,medium,small}.cnf/etc/my.cnf 並修改mysqladmin variables extended-status -u root -pKey_read_requests / Key_reads 比率Qcache_hits:命中數,大說明重複查詢多,宜增大緩存Qcache_lowmem_prunes:因內存不足清理數,大說明緩存不夠Qcache_free_blocks:碎片塊數,大說明碎片化嚴重Qcache_not_cached:未緩存查詢數(含 SQL_NO_CACHE、非確定性函數等)query_cache_type=1(ON),SQL_NO_CACHE 可單條禁用Open_tables == table_cache 且 Opened_tables 持續增長 → 需增大ulimit -n,盲目增大導致「Too many open files」
# 關閉二進制日志(非主庫/無需 PITR/無主從)
# log-bin
# 慢查詢日志(定位問題 SQL)
log_slow_queries = /var/log/mysql/slow.log
long_query_time = 10
log-queries-not-using-indexes
# 連接與線程
max_connections = 120 # 並發上限,超限自動拒絕保護服務器
wait_timeout = 120 # 閒置連接超時釋放
interactive_timeout = 120
back_log = 100 # TCP 監聽隊列長度,爆發連接緩衝
thread_cache_size = 32 # 緩存線程,案例 20 天僅創建 400 線程(前每天上千)
thread_concurrency = 4 # CPU 核心數 x2(舊版參數,新版無效)
# 會話級緩衝(默認通常足夠,大查詢會話級動態調大)
sort_buffer_size = 1M
read_buffer_size = 1M
# 引擎精簡
skip-innodb # 不用 InnoDB 時關閉,節省內存/CPU
back_logsomaxconn 限制,僅應對極短時間連接風暴。thread_cache_sizeThreads_created 增長,高併發短連接場景必調。thread_concurrencyskip-innodbdefault-storage-engine=MyISAM 配合。SHOW GLOBAL STATUS 計數器為依據,而非經驗拍腦袋