You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Homestead 11.1.0升级后数据库丢失及Homestead.yaml配置创建数据库异常问题求助

关于Homestead 11.1.0数据库创建异常的问题解析与解决方案

咱先把核心原因捋明白:你升级到的Homestead 11.x版本已经默认用MariaDB替代MySQL作为默认数据库服务了,但你参考的还是Laravel v8.x的老文档,版本不匹配导致了一系列矛盾问题。

问题1:为什么不加mysql feature时,databases列表的库创建失败?

Homestead 11.x的provision脚本会优先检测MariaDB的运行状态(因为它是默认服务)。当你没在features里指定数据库类型时,脚本会尝试连接MariaDB,但可能你的升级过程中MariaDB服务没有正常启动,或者原来的MySQL服务被停用了,脚本找不到MariaDB的PID,就直接跳过了数据库创建步骤——这就是为什么show databases;只显示默认库的原因。

问题2:加features: - mysql: true能创建库但报错?

Homestead 11.x的底层脚本其实支持通过这个配置强制启用MySQL,但官方文档(尤其是v8.x的文档)还没同步更新这个配置项,所以provision时会抛出Invalid feature: mysql的警告。不过脚本并没有完全忽略这个配置,还是会执行MySQL的数据库创建逻辑,所以你能看到db00、db01被成功创建,只是伴随一个无影响的警告。

问题3:只加- mysql配置时出现MariaDB错误?

当你只写- mysql而不指定true/false,脚本会默认按MariaDB的逻辑去执行创建,但此时你要启用的是MySQL,MariaDB服务没运行,脚本找不到它的PID,就会输出We didn't find a PID for mariadb, skipping $DB creation的提示,自然创建失败。


最优解决方案

根据你的需求,分两种推荐方案:

方案1:改用MariaDB(推荐,符合Homestead 11.x默认配置)

既然新版本默认用MariaDB,直接适配这个变化即可:

  1. 修改Homestead.yaml的配置:
    databases:
      - db00
      - db01
    features:
      - mariadb: true
    
  2. 执行vagrant provision,脚本会正常检测MariaDB服务并创建指定数据库,不会有任何报错。

方案2:强制启用MySQL(如果必须用MySQL)

如果你依赖MySQL的特定特性,需要强制开启:

  1. 修改Homestead.yaml,用services配置替代features(这是更规范的方式,避免无效feature警告):
    databases:
      - db00
      - db01
    services:
      - mysql: true
    
  2. 执行vagrant provision,脚本会启动MySQL服务并创建指定数据库,无警告报错。

补充:升级后数据库消失的原因

Homestead 11.x切换默认数据库服务后,原来MySQL的数据目录和MariaDB的目录是分开的,导致你看不到原来的数据库。如果需要恢复旧数据,可以进入虚拟机(vagrant ssh),找到旧MySQL的数据目录(通常在/var/lib/mysql),将数据迁移到MariaDB的目录(/var/lib/mysql,如果是默认安装的话),或者直接导出旧数据库再导入到新服务中。

内容的提问来源于stack exchange,提问作者Aaron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 15:17:46