通过修改 phpenv 中 mysql 的 my.ini 配置文件(位于 c:\phpenv\mysql\my.ini)的 [mysqld] 段落添加 tmpdir = c:/phpenv/mysql/tmp,并确保目录存在、system 和 mysql 运行用户具有完全控制权限,重启服务后执行 show variables like 'tmpdir' 验证生效。

phpEnv 里改 MySQL 的 tmpdir,本质就是改 MySQL 配置文件,不是 phpEnv 自身功能;不重启服务无法生效,动态 SET 会报错 “Variable 'tmpdir' is a read only variable”。
怎么找到 phpEnv 下的 MySQL 配置文件
phpEnv 并不接管 MySQL 配置逻辑,它只是启动/停止封装脚本。真实配置文件位置取决于你安装时选的 MySQL 版本和路径:
- Windows 下常见路径:
C:\phpEnv\mysql\my.ini或C:\phpEnv\mysql\my.cnf(优先找my.ini) - 如果用的是绿色版或自定义解压路径,进
phpEnv\mysql\目录搜my.ini或my.cnf,用记事本打开看是否有[mysqld]段落 - 不确定时,先在 phpEnv 界面点“MySQL → 运行 MySQL 命令行”,登录后执行:
SHOW VARIABLES LIKE 'config_file';—— 但多数 phpEnv 打包版不暴露该变量,此时直接查进程启动参数更可靠:任务管理器 → 右键 mysqld.exe → “打开文件所在位置”,看快捷方式目标或命令行参数里带的配置路径
改配置前必须做的三件事
跳过任意一步都可能导致 MySQL 启动失败,日志里出现 Can't create/write to file(Errcode: 13)或直接退出:
- 新建目录,比如:
C:\phpEnv\mysql\tmp(不要用C:\Windows\Temp或C:\phpEnv\tmp这类跨权限/共享路径) - 右键该目录 → “属性 → 安全 → 编辑 → 添加用户”,输入
SYSTEM和运行 MySQL 的用户(通常是Administrators或你手动指定的mysql用户),勾选“完全控制” - 在
my.ini的[mysqld]段落下加一行:tmpdir = C:/phpEnv/mysql/tmp(注意 Windows 下可用正斜杠,避免反斜杠转义问题)
为什么改了配置还看不到效果
常见假象和真因:
- 改完没重启:phpEnv 界面点“MySQL → 重启”或手动任务管理器杀掉所有
mysqld.exe再启动 - 路径末尾有空格:
tmpdir = C:/phpEnv/mysql/tmp→SELECT @@tmpdir;返回值肉眼难辨,建议用SELECT LENGTH(@@tmpdir);核对长度 - 权限没给对:即使你是管理员,MySQL 进程也可能以
LocalSystem身份运行,必须显式给SYSTEM权限,不能只靠继承 - 误以为
SET GLOBAL tmpdir = '...'能生效:MySQL 会立刻报错ERROR 1238 (HY000): Variable 'tmpdir' is a read only variable,这个变量根本不可动态修改
验证是否真生效了
重启后别只信 phpEnv 界面状态,进 MySQL 命令行执行:
SHOW VARIABLES LIKE 'tmpdir';
返回值必须是你的目标路径,且:
- 该目录下应能立刻看到新生成的临时文件:比如跑一个大
ORDER BY查询后,进C:\phpEnv\mysql\tmp看是否有SQL_*.MYD或#sql-*.ibd类文件 - 如果仍往
C:\Windows\Temp写,大概率是配置文件没被真正加载(检查my.ini是否在 mysqld 启动时实际读取的路径里,或被其他同名文件覆盖) - phpEnv 自带的 MySQL 通常编译时禁用了
--secure-file-priv外的路径限制,但若你升级过 MySQL 或套了安全插件,tmpdir被硬编码为/tmp也不奇怪——此时只能换回原版 phpEnv 包或重装
最易被忽略的一点:phpEnv 启动脚本有时会拼接额外参数覆盖 my.ini,比如在 phpEnv\mysql\start.bat 里发现 mysqld --defaults-file=xxx,那就得去改那个 xxx 文件,而不是你以为的 my.ini。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











