MySQL 的配置文件 my.ini(Windows)或 my.cnf(Linux)掌控著資料庫的效能、記憶體使用、連線處理等核心行為。預設配置多為英文,參數眾多,初學者往往只知皮毛。本文將常見的 [mysqld]、[client]、[mysqldump] 等區塊的關鍵參數進行分類解說,並附上建議調整方向,幫助你根據實際硬體資源與業務場景進行優化。
[mysqld]
port = 3306
socket = /tmp/mysql.sock
basedir = F:/phpecorg/MySql Server 51
datadir = F:/phpecorg/MySql Server 51/data
default-character-set = utf8
utf8mb4 以支援完整 Unicode(含 Emoji)。back_log = 50
max_connections = 100
thread_cache_size = 8
thread_concurrency = 16
table_open_cache = 2048
max_allowed_packet = 16M
binlog_cache_size = 2M
max_heap_table_size = 64M
sort_buffer_size = 8M
join_buffer_size = 32M
query_cache_size = 64M
query_cache_limit = 2M
tmp_table_size = 64M
.frm 檔案。ORDER BY、GROUP BY 及無索引 JOIN。設太大會導致記憶體耗盡,建議 2~8MB 視記憶體而定。default-storage-engine = InnoDB
innodb_buffer_pool_size = 256M
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 120
innodb_file_per_table = 1
ib_logfile*。1 最安全(每次 commit 刷盤),0/2 損耗較小但可能丟失 1 秒資料。.ibd),便於單表備份、回收空間、攜帶表移動。key_buffer_size = 64M
read_buffer_size = 2M
read_rnd_buffer_size = 24M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 64M
即使主力用 InnoDB,系統表、臨時表仍可能用到 MyISAM,key_buffer_size 不宜設為 0。
slow_query_log = 1
long_query_time = 1
log-slow-queries = "d:/logs/slow_query.log"
log-queries-not-using-indexes = 1
log-bin = mysql-bin
binlog_format = mixed
server-id = 1
binlog_format = mixed 兼顧 Statement 與 Row 模式優點,主從複制更安全。server-id 在複制拓撲中必須唯一。[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
quick 讓 mysqldump 逐行讀取而非全載入記憶體,導出大表必備。
| 參數 | 說明 |
|---|---|
| lower_case_table_names | 1=表名不分大小寫(Windows 預設),0=區分大小寫(Linux 預設) |
| character-set-server | 伺服器級預設字元集(優先於 default-character-set) |
| collation-server | 預設排序規則 |
| skip-name-resolve | 禁用 DNS 反解,避免連線延遲,僅用 IP 做權限匹配 |
| sql_mode | 嚴格模式建議:STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
| max_allowed_packet | 客戶端/伺服器通訊緩衝區上限,必須大於最大 BLOB |
innodb_buffer_pool_size、innodb_log_file_size、max_connections 三大項。Threads_created、Opened_tables、Innodb_buffer_pool_wait_free 等狀態值,動態微調。SET GLOBAL 即時生效,但重啟後失效)。