9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

rails dbコマンドでConcurrentMigrationErrorが出た場合の対処法

Last updated at Posted at 2019-10-10

rails db コマンドで次のエラーが出た場合の対処法を整理します。

rake aborted
ActiveRecord::ConcurrentMigrationError
Cannot run migrations because another migration process is currently running

環境

  • ruby 2.4.5
  • rails 5.2.2
  • MySQL 5.7.17

経緯

以下コマンドの実行後、処理が固まったので Control + C で一旦処理を中断。すると、それ以降の rails db コマンドでエラーが出るようになってしまいました。

bundle exec rake db:migrate:reset RAILS_ENV=production
rake aborted
ActiveRecord::ConcurrentMigrationError
Cannot run migrations because another migration process is currently running

エラー内容

エラー内容は、「現在処理中のマイグレーションがある」というものです。先ほど中断したコマンドが悪さをしていそうですね。

対処法

MySQLにログインし、問題となっているマイグレーションプロセスを中断させます。

msql -h [YOUR_DB_ADDRESS] -u [YOUR_USER_NAME] -p

SHOW PROCESSLIST コマンドで処理中のプロセスを一覧表示します。

USE [YOUR_DB_NAME];
SHOW PROCESSLIST;
+-------+---------------------+--------------------+---------------------+---------+------+----------------------------------+-----------------------------------------------------+
| Id    | User           | Host               | db           | Command | Time | State                            | Info                                                |
+-------+---------------------+--------------------+---------------------+---------+------+----------------------------------+-----------------------------------------------------+
| 93968 | YOUR_USER_NAME | xxx.xx.xx.xx:43364 | YOUR_DB_NAME | Sleep   | 1639 |                                  | NULL                                                |
| 93972 | YOUR_USER_NAME | xxx.xx.xx.xx:43422 | YOUR_DB_NAME | Query   | 1187 | Waiting for table metadata lock  | ALTER TABLE `contracts` DROP COLUMN `code`          |
| 93977 | YOUR_USER_NAME | xxx.xx.xx.xx:43430 | YOUR_DB_NAME | Query   | 1095 | Waiting for schema metadata lock | DROP DATABASE IF EXISTS `YOUR_DB_NAME`              |
| 93979 | YOUR_USER_NAME | xxx.xx.xx.xx:43434 | YOUR_DB_NAME | Query   | 1006 | Waiting for schema metadata lock | DROP DATABASE IF EXISTS `YOUR_DB_NAME`              |
| 93983 | YOUR_USER_NAME | xxx.xx.xx.xx:43482 | YOUR_DB_NAME | Query   |    0 | starting                         | SHOW PROCESSLIST                                    |
| 93987 | YOUR_USER_NAME | xxx.xx.xx.xx:43488 | YOUR_DB_NAME | Query   |   80 | Waiting for schema metadata lock | DROP DATABASE IF EXISTS `YOUR_DB_NAME`              |
+-------+---------------------+--------------------+---------------------+---------+------+----------------------------------+-----------------------------------------------------+

一番上の「Command: Sleep」になっているプロセスが怪しそうです。KILL コマンドで問題のプロセスを強制終了させます。今回の場合は、ID: 93968 ですね。

KILL [ID];

もう一度 SHOW PROCESSLIST; でプロセス一覧を表示し、他のプロセスが全て掃けていればOK。

これで rails db コマンドも通ります。

bundle exec rake db:migrate RAILS_ENV=production

Reference

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?