在mysql 8.0及更高版本中,数据库引入了SET PERSIST系列命令,允许管理员在不重启实例的情况下修改系统变量,并将改动写入数据目录下的自动配置文件,从而实现真正的在线修改配置。相比传统的修改my.cnf再重启,这种方式对业务连续性更加友好。

一、SET PERSIST命令的基本用法
SET PERSIST用于将系统变量设置为全局级别,并把变更持久化保存。与之对应的还有SET PERSIST_ONLY,后者只写配置文件不立即生效。常见语法如下:
-- 在线修改并持久化,立即在全局生效 SET PERSIST max_connections = 500; -- 只写入配置文件,当前运行实例不生效,下次重启生效 SET PERSIST_ONLY read_only = ON; -- 查看已持久化的变量 SELECT * FROM performance_schema.persisted_variables;
二、与SET GLOBAL的区别
使用SET GLOBAL也能在线改参数,但重启后会丢失,必须手动改配置文件。而SET PERSIST在修改内存的同时,把变量写进数据目录的mysqld-auto.cnf文件。我们可以用下面的表格看清差异:
| 命令 | 立即生效 | 重启后保留 | 写入文件 |
|---|---|---|---|
| SET GLOBAL | 是 | 否 | 否 |
| SET PERSIST | 是 | 是 | 是 |
| SET PERSIST_ONLY | 否 | 是 | 是 |
三、持久化文件说明
执行SET PERSIST后,mysql会在数据目录生成名为mysqld-auto.cnf的JSON格式文件。启动时,服务器除了读取my.cnf,也会读取该文件并应用其中变量。若要取消某个持久化设置,可使用如下命令:
-- 清除单个持久化变量 RESET PERSIST max_connections; -- 清除所有持久化变量 RESET PERSIST;
四、注意事项
- 并非所有系统变量都支持PERSIST,只读变量或某些启动期变量不可用。
- 权限方面,执行SET PERSIST需要SYSTEM_VARIABLES_ADMIN或SUPER权限。
- 若my.cnf与mysqld-auto.cnf冲突,通常以后者为准,排查问题时需注意。
- 使用
SELECT语句查看变量时,应区分全局与会话作用域。
五、简单示例
假设线上实例连接数偏小,我们可以在不重启的情况下调整:
-- 查看当前最大连接数 SHOW GLOBAL VARIABLES LIKE 'max_connections'; -- 在线调大并持久化 SET PERSIST max_connections = 1000; -- 确认修改结果 SHOW GLOBAL VARIABLES LIKE 'max_connections';
通过上述方式,mysql实现在线修改配置文件不重启成为现实,既降低了运维风险,也简化了参数管理流程。
mysqlSET_PERSIST在线修改配置修改时间:2026-07-28 09:15:18