SHOW VARIABLES 默认查会话级变量快照,关键全局配置如 innodb_buffer_pool_size 需加 GLOBAL 才能查到;模糊匹配 LIKE 不可靠,应优先用前缀精确匹配或查官方文档;输出过长可用 \G 竖排或导出 grep;布尔型变量显示为 OFF/ON 实为 0/1,脚本中宜用 SELECT @@global.var_name 获取数值。
SHOW VARIABLES 为什么查不到你想要的变量
直接执行 show variables 默认只返回会话级(session)可见的全局变量快照,但很多关键配置(比如 innodb_buffer_pool_size)实际是只读的全局设置,不会出现在默认结果里——不是没生效,而是它压根不参与会话变量继承链。
- 加
GLOBAL关键字才能强制查系统级真实值:SHOW GLOBAL VARIABLES LIKE 'max_connections' - 不加
GLOBAL时,MySQL 实际执行的是SHOW SESSION VARIABLES,部分变量会 fallback 到 global 值,但显示名仍是SESSION视图 - 某些变量(如
performance_schema相关)在 server 启动后动态关闭了,SHOW VARIABLES就完全不列出来,得看SELECT * FROM performance_schema.setup_actors这类表
LIKE 模糊匹配经常漏掉关键变量
LIKE '%buffer%' 看似能搜到所有缓存相关配置,但 MySQL 变量名用下划线分隔,且大小写不敏感,容易误判。比如 innodb_buffer_pool_instances 会被匹配,但 key_buffer_size(MyISAM 用)就不会——因为名字里没 buffer。
- 优先用精确前缀:
SHOW GLOBAL VARIABLES LIKE 'innodb_buffer%'比模糊查更可靠 - 想查某类功能的所有变量,不如直接翻官方文档的「Server System Variables」页,按模块分类比猜名更省时间
-
LIKE不支持正则,别试REGEXP,MySQL 8.0+ 的SHOW VARIABLES WHERE Variable_name REGEXP '...'也仅限部分版本,兼容性差
mysql 命令行里 SHOW VARIABLES 输出太长看不清
终端默认一页刷屏,max_allowed_packet 和 wait_timeout 这种常用变量可能被滚走,又懒得翻页。
- 加
\G结尾让结果竖排:SHOW GLOBAL VARIABLES LIKE 'max%'\G,每行一个变量,一目了然 - 导出到文件再 grep:
mysql -N -s -e "SHOW GLOBAL VARIABLES" > vars.txt && grep -i buffer vars.txt,-N去掉列名,-s紧凑输出 - 别用
pager more,在某些旧版 MySQL 客户端里会卡住或乱码,pager less -S更稳
变量值显示为 OFF/ON 而不是数字,怎么判断真假
像 slow_query_log、log_bin 这类布尔型变量,SHOW VARIABLES 显示 OFF 或 ON,但它们底层其实是整数 0/1。有些工具或监控脚本直接拿字符串比对,遇到 DISABLED(比如 query_cache_type)就懵了。
-
OFF= 0,ON= 1,DISABLED= 0(但语义上表示“被禁用”,不是“未设置”) - 写自动化脚本时,用
SELECT @@global.slow_query_log比SHOW VARIABLES更稳妥,返回明确数值 -
query_cache_type是个坑:值为OFF表示关闭,ON表示启用并自动缓存,DEMAND表示只缓存带SQL_CACHE提示的语句——别当成布尔值处理
真正难的不是查变量,而是搞清哪个变量改了要重启,哪个改了 SET GLOBAL 就生效,还有哪些变量其实在 my.cnf 里根本没配却有默认值——这些都得结合 @@global.var_name 查运行值,再和配置文件逐行对。

















