phpEnv 不提供 MySQL 只读模式开关,因其未封装 read_only/super_read_only 参数管理;需通过命令行动态设置或修改 my.ini 持久化配置,并用命令行验证生效。

phpEnv 本身不提供 MySQL 只读模式控制能力,必须直接操作 MySQL 实例的 read_only 或 super_read_only 参数。
为什么 phpEnv 的界面/配置里找不到 read_only 开关?
phpEnv 是 Windows 下的 PHP + Apache + MySQL 一体化开发环境套件,它封装了 MySQL 服务(通常是 MariaDB 或 MySQL 社区版),但不暴露或代理 MySQL 的系统变量管理界面。所有只读设置必须进入 MySQL 内部执行,或修改其配置文件。
- phpEnv 启动的 MySQL 进程默认以普通用户运行,不开放
SET GLOBAL权限给 web 界面(如 phpMyAdmin) - 其自带的“MySQL 设置”页仅支持字符集、端口等基础项,
read_only不在可配列表中 - 即使你在 phpMyAdmin 里执行
SET GLOBAL read_only = ON,也可能因权限不足报错:ERROR 1227 (42501): Access denied; you need (at least one of) the SUPER privilege(s) for this operation
在 phpEnv 中真正生效的两种设置方式
必须满足两个前提:你用的是 phpEnv 自带的 MySQL(非外部服务),且你有管理员权限启动命令行。
-
方式一:动态设置(重启后失效)
打开 phpEnv 安装目录下的MySQL\bin\mysql.exe(或使用 phpEnv 自带的“MySQL 命令行”快捷方式),以 root 登录后执行:SET GLOBAL read_only = ON;<br>SET GLOBAL super_read_only = ON;
注意:必须先设read_only = ON,再设super_read_only = ON,否则后者无效 -
方式二:配置文件持久化(推荐)
编辑 phpEnv 的 MySQL 配置文件,路径通常是:phpEnv\MySQL\my.ini(不是系统级my.cnf)
在[mysqld]段落下添加两行:read_only = ON<br>super_read_only = ON
保存后,通过 phpEnv 控制面板完全停止再重启 MySQL 服务(仅“重载配置”无效)
验证是否生效,别只信 phpMyAdmin 显示
phpMyAdmin 的“变量”页可能缓存旧值,或因权限限制读不到真实状态。务必用以下方式交叉验证:
- 在 MySQL 命令行中执行:
SELECT @@global.read_only, @@global.super_read_only;,返回1, 1才算成功 - 用一个非 root 的普通账号(如你应用连接用的
app_user)登录,执行:INSERT INTO test.t1 VALUES (1);,应明确报错:ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement - 用 root 账号测试写操作,如果也报错(错误信息含
--super-read-only),说明super_read_only生效;如果 root 仍能写,说明只开了read_only或配置未加载
最容易被忽略的是:phpEnv 默认启用的是 MariaDB(尤其新版),而 super_read_only 是 MySQL 5.7.8+ 原生参数,在 MariaDB 中对应的是 super_read_only(同名但行为略有差异)或需检查版本是否 ≥ 10.3.2;若执行 SET GLOBAL super_read_only = ON 报错 Unknown system variable 'super_read_only',说明当前是旧版 MariaDB,只能依赖 read_only + 权限回收组合控制。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











