Laravel 迁移停止并且不执行任何操作

Laravel Migration stalls and doesn't do anything

刚刚完成了 Laravel site 上列出的所有步骤以安装和启动 运行 宁 MacOS HighSierra。我目前安装了 Composer、Homebrew、valet、PHP 7.2.8、MySQL 8.0.11 版和 Laravel 5.6.28。我可以通过执行 Laravel new blog 命令创建一个新项目并且没有任何问题。此外,当我转到浏览器时,我可以看到我刚刚创建或正在处理的当前项目。我可以 运行 valet list 命令,所以我知道它 running/working。我还可以创建一个迁移,并通过 运行ning php artisan make:migration test_test_test 将其显示在我的项目中。

我的PATH里面也有~/.composer/vendor/bin

我的 .env 文件看起来像这样

APP_NAME=Laravel
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=blog        
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1 
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp 
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

I 运行 php artisan migrate -vvv 命令,它 运行s 和 stalls/hangs 没有输出。我必须 ctl-c 才能摆脱它。也尝试了 -v /-vv,做了同样的事情。

我创建了一个名为 blog 的数据库,甚至手动添加了一个 table test 以确保该数据库是 working/running。

更新

继续卸载 MySQL 并重新安装。我能够将 php artisan migrate -v 命令获取到 运行 并收到此错误。

现在我收到了这个错误。

MacBook-Pro:anything computername$ php artisan migrate -v

PDOException  : SQLSTATE[HY000] [2006] MySQL server has gone away

at /Users/computername/Sites/anything/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:68
64|         if (class_exists(PDOConnection::class) && ! $this->isPersistentConnection($options)) {
65|             return new PDOConnection($dsn, $username, $password, $options);
66|         }
67| 
> 68|         return new PDO($dsn, $username, $password, $options);
69|     }
70| 
71|     /**
72|      * Determine if the connection is persistent.

异常跟踪:

创建了一个连接到我创建的 table 的路由器和视图,以查看我是否能够访问数据库变量并将它们打印出来。在 return 我收到了这个错误。

Exception message: PDO::__construct(): Unexpected server respose while doing caching_sha2 auth: 109

服务器已消失是 MySql 错误,check this link

检查您的 mysql 服务是否确实 运行 然后,您的 .env 文件

上是否有正确的凭据

关于迁移的'initial error',我们需要看看迁移代码中有什么。

编辑:由于迁移是 Laravel 的默认设置,因此问题可能在于 Laravel 和数据库之间的连接。

确认一下:

  1. 手动创建数据库;
  2. 创建一个 table 并在其中放置一行;
  3. 创建一条路线 returns DB::statement('select * from tablejustcreated');

向该路由发出请求,如果它冻结,那就是连接,很可能是 .env 文件凭据(用户名和密码、主机、端口)。

试试这个 php artisan migrate --force [https://laravel.com/docs/5.6/migrations] 我认为这是一份迁移文档,可能会有用

这是 PHP 7.2.8 中的已知错误。降级到 PHP 7.2.7 直到它被修复。

我从 PHP 7.2.7 升级到 PHP 7.2.8 时遇到了同样的问题。

https://bugs.php.net/bug.php?id=76651

我自己也遇到过这个问题并收到错误 Exception message: PDO::__construct(): Unexpected server respose while doing caching_sha2 auth: 109

我是这样修复的:

我像这样以 root 用户身份登录 mysql mysql –uroot –p 并输入我的密码

您可以通过键入 SELECT User, Host FROM mysql.user;

来获取服务器上的用户列表

确保您看到您正尝试从 .env 文件连接到数据库的用户。 您将需要更改当前用户以使用最新版本 mysql 中所需的 caching_sha2_password。

这是那个命令。

ALTER USER `username`@`localhost` IDENTIFIED WITH caching_sha2_password BY 'password';

虽然仍然以 root 用户身份登录,但您需要 运行 此命令以允许您的用户执行允许 php artisan migrate 发生的必要任务。例如:CREATE, DROP, ALTER, DELETE 等等。

GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';

如果这不起作用,您还可以挑选并选择您想要允许的命令,而不是授予他们完全访问权限。

GRANT SELECT, INSERT ON *.* TO 'someuser'@'somehost';

希望对您有所帮助~

非常感谢@poohhbear 和其他帮助我修复此问题的人。

真正对我有用的是:

ALTER USER 'myusername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword';

...大概是因为新的 MySQL 默认为 caching_sha2_password 而 PHP 不知道如何处理。

我有同样的问题,我通过刷新权限修复了它。