mysql8.x配置my.cnf优化
1.优化目标
| 项目 | 假设值 |
|---|---|
| 服务器内存 | 16 GB |
| 存储类型 | SSD |
| 业务类型 | 高并发读写混合型(OLTP) |
| MySQL版本 | 8.0.34 |
| 系统 | Linux (RockyLinux 9等) |
2.优化版 my.cnf (推荐生产配置)
1 | [mysqld] |
3.主要优化点解析
| 项目 | 原因与说明 |
|---|---|
innodb_buffer_pool_size |
最关键参数,占内存的 50–70%,缓存数据页与索引页。原2G太小。 |
innodb_flush_log_at_trx_commit=1 |
确保事务安全,生产环境应保持 1 (强一致)。 |
innodb_flush_method=O_DIRECT |
避免双缓存(文件系统与InnoDB缓存)。SSD推荐。 |
innodb_flush_neighbors=0 |
SSD场景关闭,减少无谓IO。 |
innodb_io_capacity |
提示InnoDB 后台刷新速率。SSD应≥2000。 |
innodb_log_file_size=1G |
较合适,过大会延迟恢复,过小频繁flush。 |
innodb_log_files_in_group=2 |
默认 2 个日志文件,平衡性能与安全。 |
innodb_read/write_io_threads |
根据CPU核数(8核→8线程)。 |
max_connections=1000 |
防止连接拒绝但仍控制资源。 |
skip_name_resolve=1 |
禁止DNS解析,提高连接速度。 |
tmp_table_size / max_heap_table_size |
提高复杂查询内存临时表空间,减少磁盘落地。 |
sort_buffer_size / join_buffer_size |
合理分配排序与连接缓存,避免过大造成内存爆炸。 |
binlog_format=ROW |
更安全可靠的复制格式,推荐。 |
sync_binlog=1 |
保证主从一致与数据安全。 |
innodb_doublewrite=1 |
防止部分页写入损坏。生产务必开启。 |
4.性能优先而非数据一致性优先
可调整以下:
1 | innodb_flush_log_at_trx_commit = 2 |
吞吐量可提升 30–40%,但断电可能丢事务。
5.日常优化策略
定期重建索引与分析表
1
2OPTIMIZE TABLE table_name;
ANALYZE TABLE table_name;监控关键指标
SHOW ENGINE INNODB STATUS;SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool%';SHOW VARIABLES LIKE 'innodb_io_capacity';
监控慢查询日志 → 用 pt-query-digest 做分析。
若内存 <16 G,可比例缩减各参数:
- buffer_pool_size ≈ 内存 × 0.6
- log_file_size ≈ buffer_pool_size × 0.1