根本原因是mysql被设为只读状态或文件系统权限异常,需依次关闭super_read_only和read_only变量、清除全局读锁、修复数据目录权限、注释配置文件中的只读设置。

phpEnv 下 MySQL 表显示 Table is read only,根本原因不是 phpEnv 本身的问题,而是它内置的 MySQL 实例被意外设为只读状态,或底层文件系统权限异常。直接改配置、重启服务、检查变量三步就能解决,不用重装。
检查 read_only 和 super_read_only 是否开启
phpEnv 默认使用 MySQL 5.7+,而从 5.7 开始,super_read_only 会覆盖 read_only。只关 read_only 没用,必须先关 super_read_only。
- 用 phpEnv 自带的 MySQL 客户端或命令行连接:
mysql -uroot -proot - 执行:
SELECT @@global.read_only, @@global.super_read_only; - 如果任一返回
ON,按顺序执行:SET GLOBAL super_read_only = OFF;SET GLOBAL read_only = OFF; - 注意:这两条语句需用
root用户执行,且不能在只读状态下执行——所以得先确保没被锁死(见下一条)
确认 MySQL 进程没被全局读锁卡住
phpEnv 启动时若异常退出过,MySQL 可能残留全局读锁(尤其在 Windows 上通过任务管理器强杀进程后)。此时即使 read_only=OFF,写操作仍会被阻塞。
- 执行:
SHOW PROCESSLIST;,看是否有状态为Waiting for global read lock的线程 - 如果有,记下其
ID,执行:KILL [ID]; - 再执行:
UNLOCK TABLES;(虽无显式锁表,但该命令可清空隐式表锁状态) - 最后验证:
INSERT INTO test_table VALUES (1);看是否成功
检查 phpEnv 的 MySQL 数据目录权限和挂载状态
phpEnv 在 Windows 上默认把 MySQL 数据放于 C:\phpEnv\MySQL\data\;在 Linux/macOS(如 WSL)中路径可能为 /home/xxx/phpEnv/MySQL/data/。若该目录被设为只读,MySQL 启动时会自动启用只读模式并静默记录错误。
- Windows:右键该目录 → “属性” → 取消勾选“只读” → 应用于所有子文件夹和文件
- Linux/macOS(含 WSL):运行
ls -ld /path/to/phpEnv/MySQL/data,确认属主是运行 MySQL 的用户(通常是mysql或当前用户),且有写权限:drwxr-xr-x不够,至少要drwxr-xr-x+ 所属组可写,或直接chmod -R 755 /path/to/phpEnv/MySQL/data - 关键验证命令(Linux/macOS):
mount | grep "$(dirname $(realpath /path/to/phpEnv/MySQL/data))",确认挂载选项不含ro(只读)
避免重启 phpEnv 后恢复只读的隐藏坑
phpEnv 的 MySQL 配置文件(my.ini 或 my.cnf)里如果硬编码了 read_only=1 或 super_read_only=1,每次重启服务都会重载,导致前几步白做。
- 找到配置文件位置:通常在
C:\phpEnv\MySQL\(Windows)或/home/xxx/phpEnv/MySQL/(Linux/macOS)下的my.ini - 搜索关键词:
read_only、super_read_only、innodb_read_only - 注释掉或删掉对应行(例如改成
# read_only = 1),保存 - 必须重启 MySQL 服务生效:
phpenv service mysql restart或手动执行net stop MySQL+net start MySQL(Windows)
最常被忽略的是配置文件里的静态设置——临时 SET 变量只是内存级修改,重启即失效。修完记得验证一次 INSERT 和 COMMIT 是否真正落地。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











