【问题标题】:Vagarant/homestead does not create database unlessVagarant/homestead 不会创建数据库,除非
【发布时间】:2021-07-22 22:53:13
【问题描述】:

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

【问题讨论】:

    标签: laravel vagrant homestead


    【解决方案1】:

    你的两个问题的答案是:因为文档有点误导

    对于您的第一个问题,mysql 在技术上不是可选功能,因为它是默认安装的。但是,从v11.3.0 开始,为了提供自定义数据库,它必须列在Homestead.yaml 的功能部分下:

    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

    【讨论】:

    • 只是说是好推的公关
    【解决方案2】:

    我最近在使用 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 box,然后登录 MySQL (homestead / secret)。就我而言,我发现数据库已正确创建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-22
      • 2022-07-21
      • 1970-01-01
      • 2021-01-17
      • 2019-07-11
      • 1970-01-01
      • 2011-10-02
      • 2019-01-17
      相关资源
      最近更新 更多