我将 laravel/homestead box 升级到了 11.1.0 版本。然后令人惊讶的事情发生了:我的数据库消失了。如何?我不知道。 但是当我尝试使用 Homestead.yaml 重新安装数据库时,即使我在 Homestead.yaml 中添加了数据库列表,它也不起作用。
这是我在 Homestead.yaml 中所做的:
databases:
- db00
- db01
然后我运行了“vagrant provision”,但在 MySQL 中没有任何变化。 “显示数据库;”仅显示默认表。
然后我激活了这些功能:
features:
- mysql: true
- mariadb: false
然后我运行了“vagrant provision”并且成功了。我在 MySQL 中有两个数据库(db00 和 db01)。 以下是问题:
基于laravel/homestead documentation for laravel v8.x,mysql没有功能选项。这导致在配置期间出现以下错误:
homestead: Invalid feature: mysql
homestead: Ignoring feature: mariadb because it is set to false
在 Homestead.yaml 中添加选项“-mysql”后,我收到了 MariaDB 的以下错误
homestead: Running: script: Creating MySQL / MariaDB Database: db00
homestead: We didn't find a PID for mariadb, skipping $DB creation
homestead: Running: script: Creating MySQL / MariaDB Database: db01
homestead: We didn't find a PID for mariadb, skipping $DB creation
现在我的问题是:发生了什么?如果没有功能选项“-mysql”,则不会创建数据库;无论我是否在数据库下定义列表。添加后,一切正常,生成数据库,但是,我收到该功能无效的错误消息。它也不包含在文档中。 我哪里错了?或者如果有人有解释或更好的解决方案?
答案 0 :(得分:1)
你的两个问题的答案是:因为文档有点误导
对于您的第一个问题,mysql 在技术上不是可选功能,因为它是默认安装的。但是,从 v11.3.0
起,为了提供自定义数据库,它必须列在 Homestead.yaml
的 features 部分下:
features:
- mysql: true
因为只有在 mysql
被特别启用的情况下才运行配置脚本:
https://github.com/laravel/homestead/blob/v11.3.0/scripts/homestead.rb
对于您的第二个问题,由于 create-mysql.sh
脚本在 v11.0.0
中的实现方式而显示错误消息:
https://github.com/laravel/homestead/blob/v11.0.0/scripts/create-mysql.sh
if [ -z "$mariadb" ]
then
# Skip Creating MariaDB database
echo "We didn't find a PID for mariadb, skipping \$DB creation"
else
mysql -e "CREATE DATABASE IF NOT EXISTS \`$DB\` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci";
fi
在您使用的配置中,if [ -z "$mariadb" ]
条件将始终为真,因为 mariadbd
的进程 ID 永远不会被找到,因为它未启用。因此,即使为 mysql 成功创建了数据库,也会始终显示 We didn't find a PID for mariadb, skipping $DB creation
消息。从技术上讲,根据脚本的编码方式,这是正确的,但也有点令人困惑。
另外,你的数据库在升级时为什么消失了,假设你遵循了这些说明:
https://laravel.com/docs/8.x/homestead#updating-homestead
vagrant destroy
命令将完全移除宅基地框并重建它。因此,除非配置为备份数据,否则任何数据或其他自定义配置都将丢失:
https://laravel.com/docs/8.x/homestead#database-backups
答案 1 :(得分:0)
我最近在使用 Homestead 12.3.0 时遇到了同样的问题,并通过使用以下内容编辑我的 Homestead.yaml
解决了这个问题:
...
databases:
- homestead
- my_database
features:
# - mysql: true
- mariadb: false
- postgresql: false
- ohmyzsh: false
- webdriver: false
services:
- "mysql"
...
然后我运行了 vagrant reload --provision
,并没有再看到 MariaDB 错误。
确认您可以通过 SSH 进入 vagrant 框,然后登录 MySQL (homestead
/ secret
)。就我而言,我发现数据库已正确创建。