SHOW VARIABLES 是什么
SHOW VARIABLES 列出当前生效的参数值,分全局与会话两个维度:你可以用它核对版本、字符集、缓冲池、连接上限、binlog 与 sql_mode 等关键项,也可以对比主从实例判断配置是否漂移。要注意它显示的是运行态实际值,不一定等于配置文件里写的内容,排查来源要配合 performance_schema.variables_info。
基本信息
| 适用版本 | MySQL 5.7 / 8.0 |
|---|---|
| 语法 | SHOW [GLOBAL|SESSION] VARIABLES [LIKE '模式'] |
| 等价查询 | performance_schema.global_variables / session_variables |
| 动态调整 | SET GLOBAL 重启失效;SET PERSIST 持久化 |
| 权限要求 | 能连接实例的账号即可查询,修改需 SYSTEM_VARIABLES_ADMIN |
典型使用场景
- 上线后核对:确认关键参数是否按预期生效,而不是只改了配置文件
- 主从比对:两边跑同一组 LIKE 查询,发现配置漂移
- 字符集排查:确认客户端、连接、结果、库表各层字符集是否一致
- 调参前后对照:记录调整前的值,出现回退时能快速定位
- 生成基线:定期导出关键参数形成快照,供审计与版本比对
- 定位来源:从 variables_info 看出参数来自 my.cnf 还是自动文件
常用核对
常用核对
SHOW VARIABLES LIKE 'version%'; # 版本与编译信息
SHOW VARIABLES LIKE 'character_set_%'; # 字符集链路各层
SHOW VARIABLES LIKE 'collation_%'; # 排序规则
SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; # 缓冲池大小
SHOW VARIABLES LIKE 'max_connections'; # 连接数上限
SHOW VARIABLES LIKE 'log_bin%'; # binlog 相关开关
SHOW VARIABLES LIKE 'sql_mode'; # SQL 模式
SELECT VARIABLE_NAME, VARIABLE_SOURCE, SET_TIME FROM performance_schema.variables_info WHERE VARIABLE_NAME LIKE 'max_connections%';两种作用域对照
| 作用域 | 含义 | 改法 |
|---|---|---|
| GLOBAL | 影响所有新建立的连接 | SET GLOBAL 或 SET PERSIST |
| SESSION | 只影响当前连接,重连即失效 | SET SESSION 或 SET 关键字 |
| 只读参数 | 仅全局存在,如 innodb_buffer_pool_size | 修改需重启或按版本支持在线调整 |
| 来源字段 | variables_info.VARIABLE_SOURCE 标识来源 | 区分 my.cnf、自动文件与默认值 |
SET PERSIST 的优先级高于 my.cnf,排查参数来源别漏掉 mysqld-auto.cnf 与 RESET PERSIST。
SHOW VARIABLES 不带 GLOBAL 或 SESSION 时默认显示会话值,某些参数会话与全局不同,核对时显式写清作用域避免误判。
有些参数只在特定版本存在,例如 innodb_redo_log_capacity 需 8.0.30 及以上;跨版本写巡检脚本时要对缺失变量做容错,不能把查不到当成值为 0 或已关闭。
巡检脚本可以双路核对:SHOW VARIABLES 与 performance_schema.global_variables 同时查一遍,两者不一致时先确认读取的是哪个作用域,再下结论。