Laravel php artisan migrate 命令 - 没有错误也没有控制台输出?

Laravel php artisan migrate command - no errors and no console output?

我最近在 macOS High Sierra 10.13.6 上通过自制软件全新安装了 mysql 8.0.19。当我执行 brew services list 时,我可以看到 mysql 服务已启动。我还可以使用 mysql -u root 通过控制台登录并执行查询等等。

我已经使用 Valet 安装了一个新的 Laravel 项目,但无法 运行 数据库迁移。我的环境变量看起来都是正确的:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

我可以使用此信息连接到 MySQL Workbench(无根密码)。然而,每当我 运行 php artisan migrate 时,我都没有收到任何错误,也没有任何控制台输出。它只是卡住了。当我进入 php artisan tinker 然后 DB::connection()->getPdo() 时,同样的事情发生了。没有输出也没有错误。也没有登录 storage/logs

相关config/database.php:

...

'default' => env('DB_CONNECTION', 'mysql'),


'connections' => [


    'mysql' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL'),
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'prefix_indexes' => true,
        'strict' => true,
        'engine' => null,
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],

],

...

在随机视图上转储 DB::connection() 会产生正确的配置:

protected 'config' => 
    array (size=15)
      'driver' => string 'mysql' (length=5)
      'host' => string '127.0.0.1' (length=9)
      'port' => string '3306' (length=4)
      'database' => string 'laravel' (length=7)
      'username' => string 'root' (length=4)
      'password' => string '' (length=0)
      'unix_socket' => string '' (length=0)
      'charset' => string 'utf8mb4' (length=7)
      'collation' => string 'utf8mb4_unicode_ci' (length=18)
      'prefix' => string '' (length=0)
      'prefix_indexes' => boolean true
      'strict' => boolean true
      'engine' => null
      'options' => 
        array (size=0)
          empty
      'name' => string 'mysql' (length=5)

我尝试 运行 在普通的 PHP 脚本上进行简单的 new mysqli(...),但它也失败了,所以这不是 Laravel 的事情。

在对此进行更多研究后,解决方案就是降级我的 PHP/MySQL 版本。我使用的是 PHP 7.4+ 和 MySQL 8+。我现在回滚到 PHP ~7.3 和 MySQL ~5.7.

我碰到了this recent thread which detailed the problem. Something having to do with a new default MySQL authentication plugin. I attempted manually changing it in the database as detailed in that thread as well as here,但运气不好。

回滚对我来说是最简单的,谢谢大家!