Laravel:MariaDB - artisan migrate:refresh 挂起

Laravel: MariaDB - artisan migrate:refresh hangs

我将 Debian 9 与 MariaDB 10.1.27、Composer 1.4.2 和 Laravel 5.5.13.

一起使用

我使用 CREATE DATABASE 'laravel' 创建了一个空数据库,在 Laravel 的 .env 配置文件中配置了它,现在我有时会遇到问题,数据库操作挂起(没有任何反应)或在浏览器中我收到超时消息。仍然可以使用 mysql -u laravel -p laravel 连接到数据库 - 就像 SELECT 一样。

php artisan migrate

...有时像 migrate:refresh 一样工作,有时则不然。如果它不工作,我总是必须重新启动 MariaDB 服务,通常,它会在第一次工作时再次工作。

例如,

migrate:refresh 清除数据库并导入/加载大部分时间 10 次迁移,然后什么都不做。我已经为这个任务等了大约 1 小时,但它一直在说,迁移 table 丢失并添加了,仅此而已。 Artisan 甚至没有说它已经导入/加载了另外 9 个 tables...

为了发送电子邮件,我正在使用 supervisor,但它不应该被使用,而 运行 migrate:refreshh;

增加执行超时没有任何帮助。所以有什么问题?在 Homestead 中,它运行得非常完美。 MariaDB 中是否需要任何特定设置?或者我是否需要使用默认字符集等特定参数创建数据库?

顺便说一句:如果应用程序是 运行,我在浏览网站时有时也会收到执行超时错误消息。

当使用Supervisor控制artisan队列时,deamon一定要停止

sudo supervisorctl stop <YOUR_QUEUES>

表演时

artisan migrate:refresh

它通常会导致一种竞争条件,而 artisan 试图锁定 table jobs 以将其从数据库中删除,而 Artisan 队列正在尝试锁定 table jobs 以执行其任务。

一般查询日志(为此,我使用 MariaDB 10.1.27)显示如下:

94 Prepare   drop table if exists `jobs`
63 Query     START TRANSACTION
67 Query     SAVEPOINT trans2
67 Prepare   select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update
67 Execute   select * from `jobs` where `queue` = 'user' and ((`reserved_at` is null and `available_at` <= 1511429487) or (`reserved_at` <= 1511429397)) order by `id` asc limit 1 for update
67 Close stmt

虽然 artisan:refresh 命令 挂起 ,并且 jobs 正在由 Supervisor-powered 工作人员排队,MariaDB 服务器报告两个连接(来自 Laravel 有问题的数据库用户)正在等待元数据锁定。

一开始我也重启了MariaDB,但以一种不太干净的方式解决了这个问题。但是后来,停止 Supervisor,有所作为。