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,有所作为。
我将 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,有所作为。