Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

MySQL 配置文件 my.cnf

一、完整 my.cnf(生产级)

以下 my.cnf 适用于 MySQL 8.x,内存约 16GB 的服务器(如需 4GB/8GB/32GB/64GB)。

⚠️ 仅包含实际生产最重要、最常用、必须配置的参数(不包含无意义/过时参数)

[mysqld] 主服务配置段

[mysqld]
# -------------------------------
# 基础
# -------------------------------
user = mysql
server_id = 101
port = 3306
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
basedir = /usr/local/mysql
datadir = /data/mysql
tmpdir = /data/mysql/tmp

# -------------------------------
# 连接参数
# -------------------------------
max_connections = 400
max_connect_errors = 10000
wait_timeout = 28800
interactive_timeout = 28800

# -------------------------------
# InnoDB 核心配置
# -------------------------------
default_storage_engine = InnoDB
innodb_buffer_pool_size = 10G
innodb_buffer_pool_instances = 8
innodb_log_file_size = 1G
innodb_log_buffer_size = 64M
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
innodb_read_io_threads = 4
innodb_write_io_threads = 4

# -------------------------------
# 事务与锁
# -------------------------------
innodb_lock_wait_timeout = 50
transaction_isolation = READ-COMMITTED

# -------------------------------
# 二进制日志(binlog)
# -------------------------------
log_bin = mysql-bin
binlog_format = ROW
binlog_row_image = FULL
sync_binlog = 1
expire_logs_days = 7
binlog_cache_size = 4M
gtid_mode = ON
enforce_gtid_consistency = ON
log_slave_updates = ON

# -------------------------------
# 慢查询日志
# -------------------------------
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 0

# -------------------------------
# 错误日志
# -------------------------------
log_error = /var/log/mysql/error.log

# -------------------------------
# 字符集
# -------------------------------
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci

# -------------------------------
# 其他
# -------------------------------
skip_name_resolve = 1

二、my.cnf 参数完整详解(运维必须掌握)

以下对 最常用、最重要、生产必需的参数 进行分类讲解。

1. 基础参数

server_id

用于复制集群内唯一 ID。

datadir

数据库文件存储路径。

socket

本地连接使用。

tmpdir

临时文件目录(排序、文件排序都会放这里)。

2. 连接参数

参数 说明 建议
max_connections 最大连接数 300~500 足够
max_connect_errors IP 连续连接失败限制 10000
wait_timeout 空闲连接超时 8 小时
interactive_timeout 交互连接超时 同上

💡 不要把 max_connections 设置太大,否则会打爆服务器资源。

3. 线程、缓存、会话相关

thread_cache_size

线程缓存数量(减少线程反复创建)。

table_open_cache

表缓存数量。

query_cache

MySQL 8.0 已彻底移除,不能使用。

4. InnoDB 存储引擎(核心重点)

这是 MySQL 运维最重要内容。

innodb_buffer_pool_size

Buffer Pool 大小(核心参数)

  • MySQL 性能的 80% 都取决于这个配置。
  • 推荐设置为物理内存的 60%~70%。

innodb_buffer_pool_instances

实例数量

  • 建议:8(16GB 内存)

innodb_log_file_size

Redo Log 文件大小

  • 常用值:512M ~ 4G

影响写入性能与恢复速度。

innodb_log_buffer_size

日志缓冲大小

  • 推荐:64M

innodb_flush_method = O_DIRECT

让 MySQL 直接写磁盘,避免双缓存(OS Page Cache)。

innodb_flush_log_at_trx_commit

事务一致性:

含义
1 最安全(生产强烈推荐)
2 每秒刷一次
0 不安全

innodb_file_per_table

独立表空间。必须开启。

innodb_lock_wait_timeout

锁等待超时避免死锁。

5. Binlog 与复制(生产关键)

log_bin

启用二进制日志。

binlog_format

3 种格式:

格式 说明 推荐
STATEMENT 语句级 ❌ 不一致
MIXED 混合级 ⚠️ 不推荐
ROW 行级 ✅ 强一致性

sync_binlog

控制 binlog 的刷盘:

含义 推荐
1 每次事务刷盘 ✅ 最安全
0 不刷盘
N 每 N 次刷盘 可提升性能

expire_logs_days

自动清理 binlog。

gtid_mode = ON

开启 GTID(强烈推荐)。

log_slave_updates

让从库也记录 binlog,用于级联复制。

6. 慢查询日志

slow_query_log

开启慢查询日志。

long_query_time

慢查询时间阈值建议:1s

log_queries_not_using_indexes

一般不建议开启,会导致日志爆炸。

7. 字符集

character_set_server = utf8mb4

永远用 utf8mb4,而不是 utf8(假 utf8)。

8. 其他核心参数

参数 说明
skip_name_resolve 禁止 DNS 反查,提高连接速度
lower_case_table_names 是否大小写敏感(Linux 默认为 0)
sql_mode 严格模式

生产建议 SQL_MODE:

STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION