phpenv自带mysql需手动启用服务、初始化数据目录并配置php.ini扩展;启动后通过error.log获取初始密码,修改bind-address和认证插件以确保php成功连接。

phpEnv 自带 MySQL,不需要额外安装,但必须手动启用并配置服务才能用。
phpEnv 里 MySQL 是“预装未启动”状态
下载安装 phpEnv 后,MySQL(通常是 5.7 或 8.0)已解压到 phpenv\mysql 目录下,但默认不注册 Windows 服务、不初始化数据目录、也不监听端口。你直接运行 mysql 命令会报错:'mysql' 不是内部或外部命令,或者连接时提示 Can't connect to MySQL server on 'localhost'。
关键动作不是“安装”,而是“激活”:
- 打开 phpEnv 主界面 → 点击左上角 应用软件 → 勾选
MySQL(版本号如8.0.33),再点 确定 - 点击主界面右上角 启动服务 → 确保 MySQL 行显示绿色“已启动”
- 首次启用时,phpEnv 会自动执行
mysqld --initialize并生成 root 初始密码(见日志窗口或phpenv\mysql\data\error.log)
如何确认 MySQL 已正常运行并获取 root 密码
启动服务后别急着连,先验证状态:
- 打开终端(cmd 或 PowerShell),执行:
netstat -ano | findstr :3306—— 若有输出,说明端口已被占用或已监听 - 若没输出,检查 phpEnv 日志窗口是否报错,常见原因是:3306 端口被其他程序(如另一个 MySQL、Docker、Navicat 后台服务)占用了
- 初始 root 密码不会显示在界面上,它藏在错误日志里。打开文件:
phpenv\mysql\data\error.log,搜索A temporary password,类似这样一行:A temporary password is generated for root@localhost: sX9#qL2!mPvT - 用该密码登录:
mysql -u root -p,然后立刻改密:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_pass';
php.ini 中的 MySQL 扩展必须匹配 MySQL 版本
phpEnv 启动 Apache/PHP 后,PHP 默认不加载 MySQL 驱动,mysqli_connect() 会报 Call to undefined function mysqli_connect()。
打开 phpenv\php\php.ini(注意不是 php.ini-development 或 php.ini-production),重点修改三处:
- 确认
extension_dir指向正确路径,例如:extension_dir = "D:/phpenv/php/ext"(路径需与你实际安装盘符一致) - 取消注释这三行(位置可能在 870–890 行附近):
extension=php_mysqli.dll、extension=php_pdo_mysql.dll、extension=php_opcache.dll(OPcache 非必须但强烈建议开) - 特别注意:
php_mysql.dll是 PHP 5.6 以前的旧扩展,PHP 7.0+ 已彻底移除,保留它会导致 Apache 启动失败
改完保存,重启 phpEnv 的“启动服务”按钮,再访问 http://localhost/phpinfo.php,搜索 mysqli 和 PDO drivers,确认 mysql 出现在 PDO 支持列表中。
连接失败时优先排查这三件事
即使服务绿了、扩展开了、密码对了,还是连不上?大概率卡在这三个地方:
-
bind-address被锁死:phpEnv 的mysql\my.ini默认设了bind-address = 127.0.0.1,这是安全的,但如果你用 Docker 或远程客户端连,得改成0.0.0.0或删掉这一行(改完要重启 MySQL 服务) - 防火墙拦截:Windows Defender 防火墙可能阻止 3306 入站,临时关闭测试,或添加入站规则放行 TCP 3306
- host 写错:PHP 代码里用
mysqli_connect('127.0.0.1', ...)比'localhost'更可靠 —— 因为后者在 Windows 下可能走命名管道而非 TCP,而 phpEnv 的 MySQL 只监听 TCP
复杂点在于:phpEnv 把 MySQL 当作“可插拔组件”,它不干涉你的 my.ini,也不帮你处理权限模型升级(比如 MySQL 8.0 默认用 caching_sha2_password 认证插件,老 PHP 扩展不兼容),这些都得你手动调。忽略它们,就只能看到“Access denied”或空连接超时。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











