reset persist 仅清除 mysqld-auto.cnf 中指定变量的持久化条目及 performance_schema.persisted_variables 表中对应记录,不影响当前内存中的变量值,也不修改其他配置文件或默认值。

RESET PERSIST 会清掉什么,又不会动什么
执行 RESET PERSIST 后,mysqld-auto.cnf 文件中对应变量的条目会被移除,同时 performance_schema.persisted_variables 表里那条记录也会消失。但它**完全不影响当前内存中的变量值**——也就是说,max_connections 还是 500,innodb_buffer_pool_size 还是 2G,一切照旧运行。
常见误解是以为它能“回滚到上一次配置”或“恢复默认值”,其实不是。它只是把“持久化动作”本身撤掉,不负责重置值。
只清除特定变量,而不是全清
可以指定变量名,只清理某一项持久化设置:
RESET PERSIST max_connections;
这样只会删掉 mysqld-auto.cnf 里 max_connections 的 JSON 字段,其它如 sort_buffer_size、wait_timeout 等仍保留在文件中。
注意以下几点:
-
RESET PERSIST不接受通配符或模糊匹配,必须写全变量名 - 若变量未被持久化过,执行会报错:
ERROR 3614 (HY000): Variable 'xxx' is not persisted - 该操作需要
SYSTEM_VARIABLES_ADMIN权限
清完之后变量值从哪来
一旦用 RESET PERSIST max_connections 清除了持久化项,下次 MySQL 启动时,这个变量就不再从 mysqld-auto.cnf 加载,而是退回到原本的加载顺序:先读 /etc/my.cnf 等标准配置文件,再 fallback 到编译默认值。
所以实际生效值取决于:
- 你是否在
my.cnf里显式写了max_connections = 151 - 如果没有,就用 MySQL 8.0 的默认值(例如
max_connections默认是 151) - 注意:它不会“自动还原成上次 SET GLOBAL 的值”,那个值只存在于内存,重启即丢
误删 mysqld-auto.cnf 后怎么补救
如果手抖删了整个 mysqld-auto.cnf,MySQL 启动时不会报错,但所有已持久化的变量都会失效——相当于全部“被重置”。这时不要慌,有两条路:
- 重新执行一遍
SET PERSIST命令,比如SET PERSIST max_connections = 500;,文件会自动重建 - 或者临时关闭自动加载:启动前在命令行加
--persisted_globals_load=OFF,或在my.cnf的[mysqld]段里加persisted_globals_load = OFF,避免因文件损坏导致启动失败
真正容易被忽略的是:哪怕你只是给变量设了个和当前值一样的值(比如 SET PERSIST max_connections = 500; 而此时它已经是 500),MySQL 依然会把它写进 mysqld-auto.cnf ——这意味着 RESET PERSIST 之后,你得靠自己记住哪些值是“真改过”的,哪些只是“存了个相同的值”。











