参数三种改法是什么
MySQL 参数有三种落地方式,命运完全不同:SET GLOBAL 立即对新连接生效但重启即失;SET PERSIST 立即生效并写入 mysqld-auto.cnf,重启后仍然是新值;直接改 my.cnf 需要重启(个别动态参数可重新加载)才生效。排障时先确认参数值来自哪一层,再决定改哪里,否则会得到「改了没用」或「重启又变回去」的结果。
基本信息
| 动态参数 | SET GLOBAL / SET PERSIST 立即生效,新连接可见 |
|---|---|
| 静态参数 | 如 log_bin、lower_case_table_names,必须重启 |
| 关键文件 | my.cnf 与 datadir 下的 mysqld-auto.cnf |
| 查询来源 | performance_schema.variables_info 的 VARIABLE_SOURCE |
| 所需权限 | SYSTEM_VARIABLES_ADMIN |
典型使用场景
- 临时压测调参:SET GLOBAL 试值,验证有效后再永久落盘
- 灰度生效:SET PERSIST 避免重启,同时保证重启后不回退
- 排查参数来源:确认实际值到底来自 my.cnf 还是自动文件
- 上线前变更:静态参数必须规划重启窗口与回滚方案
- 撤销错误改动:RESET PERSIST 清掉自动文件里的条目
- 巡检一致性:批量导出 variables_info 与配置管理基线做比对
示例与查看来源
示例与查看来源
SET GLOBAL max_connections = 1000; # 立即生效,重启丢失
SET PERSIST max_connections = 1000; # 写入 mysqld-auto.cnf,重启仍在
RESET PERSIST max_connections; # 撤销持久化,回到配置文件的值
SET PERSIST_ONLY max_connections = 1000; # 只写文件不立刻生效,适合静态参数
SELECT VARIABLE_NAME, VARIABLE_VALUE, VARIABLE_SOURCE, SET_TIME
FROM performance_schema.variables_info
WHERE VARIABLE_NAME IN ('max_connections','innodb_buffer_pool_size');三种方式对照
| 方式 | 生效时机 | 是否持久 |
|---|---|---|
| SET GLOBAL | 立即,新会话可见 | 否,重启回到配置文件值 |
| SET PERSIST | 立即,新会话可见 | 是,写入 mysqld-auto.cnf |
| my.cnf 修改 | 重启或 reload 后 | 是,需人工维护版本 |
| SET PERSIST_ONLY | 重启后生效 | 是,适合静态参数 |
my.cnf 与 mysqld-auto.cnf 同时存在时以自动文件优先;排障先查 variables_info 的 VARIABLE_SOURCE,别只翻 my.cnf。
静态参数改完必须重启,而重启是有业务影响的操作:改前确认从库延迟、切换预案与回滚脚本,重启后用 variables_info 核对实际生效值。
每次改完参数都建议留一条变更记录:时间、参数名、旧值、新值、操作人、验证结果。参数引起的问题常在数周后才暴露,没有记录就只能靠猜测回溯,这也是配置漂移难以收敛的主要原因。