萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 配置文件 my.cnf 核心參數詳細解析與調優指引

my.cnf(Windows 下為 my.ini)是 MySQL 伺服器的核心配置檔,合理調整參數能顯著提升效能與穩定性。本文系統整理常用參數分類、作用與建議值,供 DBA 與開發者查閱調優。

基本路徑與核心目錄設定

參數說明典型值/建議
basedirMySQL 安裝根目錄/usr/local/mysql
datadir資料檔存放目錄/var/lib/mysql
socket本地通訊 Socket 檔(Linux)/var/lib/mysql/mysql.sock
pid-file進程 ID 檔路徑/var/run/mysqld/mysqld.pid
lower_case_table_name表名大小寫敏感度(1=不敏感)Windows 建議 1,Linux 建議 0

字符集與語言設定

character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
# init_connect = 'SET NAMES utf8mb4'  # 連線自動設定字符集

建議:全環境統一使用 utf8mb4 支援完整 Unicode(含 Emoji),避免亂碼。

網路、連線與安全

參數說明建議
portTCP 監聽埠3306(生產環境建議修改非預設埠)
bind-address綁定 IP,0.0.0.0 監聽所有介面內網 IP 或 127.0.0.1(僅本機)
max_connections最大同時連線數視記憶體而定,如 500~2000
skip-name-resolve禁用 DNS 解析,加速連線生產環境建議開啟
skip-networking僅允許本地 Socket 連線極高安全需求時啟用
max_allowed_packet單次封包最大長度64M~256M(防大欄位截斷)

記憶體、快取與查詢優化

參數說明建議值(4GB RAM 範例)
key_buffer_sizeMyISAM 索引快取256M~512M
innodb_buffer_pool_sizeInnoDB 核心快取(資料+索引)物理記憶體 60~80%(如 3G)
innodb_log_buffer_size事務日志快取16M~64M
query_cache_type查詢快取模式(0=關/1=開/2=按需)0(MySQL 5.7+ 已棄用,建議關閉)
query_cache_size查詢快取大小0
tmp_table_size / max_heap_table_size記憶體臨時表上限64M~256M
sort_buffer_size排序快取(每連線)2M~8M
read_buffer_size循序讀取快取(每連線)128K~256K
join_buffer_size無索引聯結快取(每連線)256K~1M
table_open_cache表快取數量2000~4000

日志與二進制日志

# 一般查詢日志(除錯用,生產建議關閉)
# general_log = 1
# general_log_file = /var/log/mysql/mysql.log

# 慢查詢日志(必開)
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1          # 超過 1 秒記錄
log_queries_not_using_indexes = 1

# 二進制日志(主從/時間點恢復必備)
log-bin = mysql-bin
server-id = 1
binlog_format = ROW          # ROW 格式最安全
max_binlog_size = 100M
expire_logs_days = 7         # 自動清理 7 天前日志
sync_binlog = 1              # 每次提交同步刷盤(最安全)

InnoDB 核心參數

參數說明建議
innodb_file_per_table獨立表空間ON(預設開啟)
innodb_flush_log_at_trx_commit事務提交刷盤策略1(最安全),2(高效能妥協)
innodb_log_file_sizeRedo log 檔案大小256M~1G(總大小 = size × files_in_group)
innodb_log_files_in_groupRedo log 群組檔案數2~4
innodb_io_capacity磁碟 IOPS 能力提示SSD 建議 2000~5000
innodb_thread_concurrencyInnoDB 並發執行緒上限0(自動,MySQL 5.5+ 建議)

主從複寫專用參數

Master 端

server-id = 1
log-bin = mysql-bin
binlog-do-db = business_db
binlog-ignore-db = mysql,information_schema,performance_schema

Slave 端

server-id = 2
relay-log = relay-bin
log-slave-updates = 1          # 級聯複寫需開啟
read-only = 1                  # 防止誤寫入
replicate-do-db = business_db
replicate-ignore-db = mysql,information_schema,performance_schema
slave-skip-errors = 1062,1032  # 忽略主鍵衝突/找不到記錄(謹慎使用)

其他實用參數

  • default-storage-engine = InnoDB
  • sql_mode = STRICT_TRANS_TABLES,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
  • default-time-zone = '+08:00'
  • ft_min_word_len = 2(中文全文索引需配合 ngram parser)

配置生效與驗證

  1. 修改 my.cnf 後重啟:systemctl restart mysqld
  2. 登入 MySQL 驗證:SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
  3. 觀察狀態指標:SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';

注意:參數調整需依實際硬體、負載型態測試驗證,切勿盲目套用網路範本。建議建立基準測試流程,單一參數變更觀察效果。

copyright © 萬盛學電腦網 all rights reserved