改完需重启才生效的参数有innodb_buffer_pool_size、max_connections、innodb_log_file_size;skip-name-resolve也需重启,而query_cache_type在8.0已废弃。

my.cnf 里哪些参数改了立刻见效
刚装完 MySQL,不调参也能跑,但默认配置是为低配机器设计的。真正影响响应速度和并发能力的,其实是几个关键参数,改完重启 mysqld 就能感知到变化。
重点关注以下三项:
-
innodb_buffer_pool_size:设成物理内存的 50%–75%,但别超过 80%;太小会导致频繁磁盘读,太大挤占系统缓存 -
max_connections:默认 151,如果应用报Too many connections,先看实际连接数(SHOW STATUS LIKE 'Threads_connected'),再设为峰值的 1.2 倍 -
innodb_log_file_size:默认 48MB,建议调大到 256–1024MB(需先停库、删旧日志、改配置、再启库);大日志文件能减少 checkpoint 频率,提升写吞吐
为什么改了 innodb_buffer_pool_size 还没变快
这个参数只对 InnoDB 表生效,如果你用的是 MyISAM 引擎,它完全不生效。另外,即使改对了,也要等 buffer pool “热起来”——也就是查询把常用数据页载入内存后,效果才明显。
验证是否生效:
- 执行
SHOW VARIABLES LIKE 'innodb_buffer_pool_size'确认值已更新 - 查命中率:
SHOW STATUS LIKE 'Innodb_buffer_pool_read%',计算(Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests,低于 95% 就说明还是常刷盘 - 注意:如果表数据远小于 buffer pool,但命中率仍低,可能是查询没走索引,得看慢日志
skip-name-resolve 不加会拖慢连接速度
MySQL 默认会对每个新连接做反向 DNS 解析,如果服务器没配好 DNS 或网络不通,单次连接可能卡住几秒。线上环境几乎必开。
操作很简单,在 [mysqld] 段加一行:
skip-name-resolve
加完重启,但要注意副作用:
- 所有
GRANT语句里的host必须用 IP,不能再用域名或%(除非你确定客户端都走 localhost) - 如果之前用
'user'@'webserver.example.com'授权,现在要改成'user'@'10.0.1.5'并重刷权限
query_cache_type 已废弃,别再设了
MySQL 8.0 已彻底移除查询缓存,5.7 虽还存在但默认关闭(query_cache_type=0)。哪怕你手动打开,只要表有任一写操作,整个表对应的所有缓存都会失效——高并发写场景下,它反而成为锁争用点。
替代方案更实在:
- 应用层加 Redis 缓存热点结果
- 用
SELECT SQL_NO_CACHE ...显式跳过(仅调试用) - 优先优化慢查询本身:加索引、避免
SELECT *、拆分大事务
真正容易被忽略的是:很多一键安装脚本或 Docker 镜像仍带过时的 my.cnf 示例,里面还保留 query_cache 相关配置,直接复制就会埋坑。











