只有同时满足IS_DYNAMIC='YES'且VARIABLE_SCOPE='GLOBAL'的全局变量(如max_connections、wait_timeout、innodb_buffer_pool_size等)才支持SET PERSIST;datadir、port等只读变量不支持,须改my.cnf后重启。
不是所有全局变量都支持持久化。硬写会直接报错:ERROR 1238 (HY000): Variable 'xxx' is a read only variable。必须确认变量同时满足两个条件:动态可改(IS_DYNAMIC = 'YES')且作用域为全局(VARIABLE_SCOPE = 'GLOBAL')。
查法很简单:
SELECT VARIABLE_NAME, VARIABLE_SCOPE, IS_DYNAMIC FROM performance_schema.variables_info WHERE VARIABLE_NAME = 'max_connections';
max_connections、wait_timeout、innodb_buffer_pool_size(MySQL 8.0.22+)、log_bin(需配合 SET PERSIST_ONLY)datadir、port、socket、server_id——这些仍得改 my.cnf + 重启核心就一条:是否立刻改内存值。
SET PERSIST max_connections = 500; → 内存立即变成 500,同时写入 mysqld-auto.cnf,重启后仍是 500SET PERSIST_ONLY log_bin = OFF; → 内存值不变(比如当前 binlog 还开着),只写进 mysqld-auto.cnf,下次重启才关闭 binlog两者都写同一个文件:mysqld-auto.cnf(位于 SELECT @@datadir; 返回的路径下),JSON 格式,由 MySQL 自动管理。千万别手动编辑它——一个逗号错,MySQL 启动就失败。
报错基本不是语法问题,而是环境卡住了:
ERROR 1227 (42000): Access denied; you need SYSTEM_VARIABLES_ADMIN privilege。普通 root 默认没有这个权限,要显式授权:GRANT SYSTEM_VARIABLES_ADMIN ON *.* TO 'admin'@'%';
ERROR 3615 (HY000): Cannot write to mysqld-auto.cnf。常见于容器挂载为只读、SELinux 启用、或数据目录属主不对my.cnf 里同名参数干扰。注意:mysqld-auto.cnf 加载优先级最高,但前提是它被成功加载;可用 SHOW VARIABLES LIKE 'persisted_globals_load'; 确认该开关是否为 ON
命令返回成功不代表已持久化。得查两处:
SELECT * FROM performance_schema.persisted_variables WHERE VARIABLE_NAME = 'max_connections'; —— 有记录说明已落盘SELECT @@datadir; 确认路径),看是否存在 mysqld-auto.cnf,内容应为合法 JSON(不要打开编辑)RESET PERSIST max_connections;;全清?用 RESET PERSIST;
最易忽略的是:即使设成和当前值一样的数,SET PERSIST 也会写入文件;但设为 DEFAULT(如 SET PERSIST max_connections = DEFAULT;)可清除该变量的持久化条目。
Tplink企业版路由器WiFi名称的默认设置介绍(Tplink企业版路由器WiFi名称的默认设置是什么)
Tplink路由器灯常亮无法上网的原因分析(如何解决Tplink路由器灯常亮无法上网的问题)
Tplink千兆企业级路由器自动重启的作用和优势介绍(如何设置Tplink千兆企业级路由器自动重启功能)
一根天线的tplink路由器有哪些(一根天线的Tplink路由器的特点和优势介绍)
tplink路由器外网访问不了nas(Tplink路由器外网访问NAS的原因分析)
Tplink无法搜到路由器的原因分析(如何解决Tplink无法搜到路由器的问题)