流浪者/宅基地不会创建数据库,除非

时间:2021-04-29 14:40:03

标签: laravel vagrant homestead

我将 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)。 以下是问题:

  1. 基于laravel/homestead documentation for laravel v8.x,mysql没有功能选项。这导致在配置期间出现以下错误:

    homestead: Invalid feature: mysql
    homestead: Ignoring feature: mariadb because it is set to false
    
  2. 在 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”,则不会创建数据库;无论我是否在数据库下定义列表。添加后,一切正常,生成数据库,但是,我收到该功能无效的错误消息。它也不包含在文档中。 我哪里错了?或者如果有人有解释或更好的解决方案?

2 个答案:

答案 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)。就我而言,我发现数据库已正确创建。