MySQL 配置文件 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
以下对 最常用、最重要、生产必需的参数 进行分类讲解。
用于复制集群内唯一 ID。
数据库文件存储路径。
本地连接使用。
临时文件目录(排序、文件排序都会放这里)。
| 参数 | 说明 | 建议 |
|---|---|---|
| max_connections | 最大连接数 | 300~500 足够 |
| max_connect_errors | IP 连续连接失败限制 | 10000 |
| wait_timeout | 空闲连接超时 | 8 小时 |
| interactive_timeout | 交互连接超时 | 同上 |
💡 不要把 max_connections 设置太大,否则会打爆服务器资源。
线程缓存数量(减少线程反复创建)。
表缓存数量。
MySQL 8.0 已彻底移除,不能使用。
这是 MySQL 运维最重要内容。
Buffer Pool 大小(核心参数)
- MySQL 性能的 80% 都取决于这个配置。
- 推荐设置为物理内存的 60%~70%。
实例数量
- 建议:8(16GB 内存)
Redo Log 文件大小
- 常用值:512M ~ 4G
影响写入性能与恢复速度。
日志缓冲大小
- 推荐:64M
让 MySQL 直接写磁盘,避免双缓存(OS Page Cache)。
事务一致性:
| 值 | 含义 |
|---|---|
| 1 | 最安全(生产强烈推荐) |
| 2 | 每秒刷一次 |
| 0 | 不安全 |
独立表空间。必须开启。
锁等待超时避免死锁。
启用二进制日志。
3 种格式:
| 格式 | 说明 | 推荐 |
|---|---|---|
| STATEMENT | 语句级 | ❌ 不一致 |
| MIXED | 混合级 | ⚠️ 不推荐 |
| ROW | 行级 | ✅ 强一致性 |
控制 binlog 的刷盘:
| 值 | 含义 | 推荐 |
|---|---|---|
| 1 | 每次事务刷盘 | ✅ 最安全 |
| 0 | 不刷盘 | ❌ |
| N | 每 N 次刷盘 | 可提升性能 |
自动清理 binlog。
开启 GTID(强烈推荐)。
让从库也记录 binlog,用于级联复制。
开启慢查询日志。
慢查询时间阈值建议:1s
一般不建议开启,会导致日志爆炸。
永远用 utf8mb4,而不是 utf8(假 utf8)。
| 参数 | 说明 |
|---|---|
| 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