show variables 显示 mysql 启动时加载的静态配置参数,如 max_connections、innodb_buffer_pool_size 等,不反映运行时动态修改或实时性能指标。

show variables 能看到哪些参数?
SHOW VARIABLES 查的是 MySQL 启动时加载的静态配置,比如 max_connections、innodb_buffer_pool_size、character_set_server 这类“服务一开就定死”的值。它不反映运行中动态调整过的状态(比如临时改了会话级 sort_buffer_size,这个会话里生效但 SHOW VARIABLES 不显示变化),也不包含实时性能指标。
- 查全部:直接执行
SHOW VARIABLES - 查某个:用模糊匹配,比如
SHOW VARIABLES LIKE '%buffer%'或精确查SHOW VARIABLES LIKE 'max_connections' - 注意大小写不敏感,但通配符
%必须写,否则可能查不到(尤其在旧版本)
为什么 show variables 显示的值和 my.cnf 里写的不一样?
常见原因不是配置没生效,而是 MySQL 没读到你改的那个文件,或者被其他配置覆盖了。MySQL 启动时按固定顺序找配置文件:/etc/my.cnf → /etc/mysql/my.cnf → /usr/etc/my.cnf → ~/.my.cnf,后面读到的同名参数会覆盖前面的。
- 确认实际加载了哪个文件:启动时加
--print-defaults,例如mysqld --print-defaults - 检查是否用了
--defaults-file指定了特定路径,这时只读那个文件,其他全忽略 - 修改后必须重启 MySQL 服务,
SET PERSIST除外(8.0.22+ 支持部分参数热持久化,但SHOW VARIABLES仍显示当前值,不等于已写入配置文件)
show variables 和 show status 容易混淆的点
SHOW VARIABLES 是“我打算怎么干”,SHOW STATUS 是“我现在干得怎么样”。比如 Threads_connected 在 SHOW STATUS 里是当前活跃连接数,而 max_connections 在 SHOW VARIABLES 里只是上限值。
- 想看内存分配是否到位?查
SHOW VARIABLES里的innodb_buffer_pool_size,再结合SHOW STATUS里的Innodb_buffer_pool_pages_total算实际使用率 -
query_cache_size在SHOW VARIABLES里可能是 268435456,但query_cache_type是OFF,那这 256MB 就压根没启用 - 某些参数如
tmp_table_size和max_heap_table_size存在联动:实际生效的是二者中较小的那个值,这点文档很少强调,但线上临时表频繁落盘往往就卡在这儿
配置文件改了但 show variables 没变?先做三件事
别急着重启,先快速验证配置是否真被识别。MySQL 提供了免启动校验方式:
- 用
mysqld --defaults-file=/etc/my.cnf --validate-config检查语法和参数合法性 - 加
--log-error-verbosity=2可捕获弃用警告,比如slave_preserve_commit_order已被标记为废弃,继续用未来版本会失效 - 如果用的是 RDS 或云数据库,
my.cnf可能根本不可写,参数要通过控制台或 API 修改,此时SHOW VARIABLES显示的是云厂商注入的最终值,和本地文件无关
真正容易被忽略的是:有些参数(如 open_files_limit)不仅受 MySQL 配置影响,还受限于系统级 ulimit 设置,SHOW VARIABLES 显示的值,其实是 min(配置值, 系统允许最大文件数)。











