注意:硬體再強,若參數錯誤或查詢爛,同樣會倒;參數調好,查詢未優化,高負載下仍會失效。
[mysqld]
# 基礎
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
socket = /tmp/mysql.sock
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
# 連線
max_connections = 1000
max_connect_errors = 100000
wait_timeout = 300
interactive_timeout = 300
# InnoDB 核心
innodb_buffer_pool_size = 4G # 實體記憶體 60-80%
innodb_log_file_size = 512M
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 1 # ACID
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_thread_concurrency = 0 # 0=不限,高並發可設 16-64
# 查詢快取 (5.7+ 已移除,改用 ProxySQL/Redis)
# query_cache_type = 0
# query_cache_size = 0
# 慢查詢日誌
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
log_slow_admin_statements = 1
log_slow_slave_statements = 1
# 二進制日誌
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 7
sync_binlog = 1
# 其他
tmp_table_size = 64M
max_heap_table_size = 64M
sort_buffer_size = 4M
join_buffer_size = 4M
read_rnd_buffer_size = 8M
bulk_insert_buffer_size = 64M
[mysqld]
log-slow-queries = /var/log/mysql/slow.log
long_query_time = 5
log-queries-not-using-indexes
分析工具:mysqldumpslow -s t /var/log/mysql/slow.log(按時間排序)、pt-query-digest (Percona Toolkit) 深度分析。
EXPLAIN 分析執行計畫,確認 type、key、rows、Extra。SELECT *、ORDER BY RAND()、LIKE '%kw%'、函數包裹索引欄位。WHERE id > last_id LIMIT n。ANALYZE TABLE、OPTIMIZE TABLE。| 指標 | 健康閾值 | 異常處理 |
|---|---|---|
| Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests | < 1% | 擴大 buffer pool 或檢查熱點資料 |
| Threads_connected / max_connections | < 80% | 檢查連線洩漏、啟用連線池 |
| Innodb_row_lock_waits | 低 | 分析鎖競爭 SQL、優化索引 |
| Created_tmp_disk_tables / Created_tmp_tables | < 25% | 調大 tmp_table_size、優化 GROUP BY/ORDER BY |
| Seconds_Behind_Master | 0 | 檢查從庫 SQL 執行緒、網路、大事務 |