読者です 読者をやめる 読者になる 読者になる

Rails5: データベースがrakeタスクからdropできない時の対処法

問題点

Rails5になってrakeタスクのdrop動作に大きな変更があったらしく, Rails4からアップデートして初めての rake db:drop がエラーを吐いてしまう.

$ bundle exec rake db:drop
Mysql2::Error: Error dropping database (can't rmdir './db_name', errno: 66): DROP DATABASE IF EXISTS `db_name`
Couldn't drop database 'db_name'

mysqlから直接ドロップも出来ない

mysql> DROP DATABASE db_name;
ERROR 1010 (HY000): Error dropping database (can't rmdir './db_name', errno: 66)

解決策: データベースのファイルを根こそぎ削除する

まずはデータベースの入っているディレクトリを調べる:

mysql> select @@datadir;
+-----------------------+
| @@datadir             |
+-----------------------+
| /usr/local/var/mysql/ |
+-----------------------+
1 row in set (0.00 sec)

あるいは:

$ mysql -e "select @@datadir"
+-----------------------+
| @@datadir             |
+-----------------------+
| /usr/local/var/mysql/ |
+-----------------------+

データベースディレクトリに移動して, 該当ファイルを削除する:

$ cd /usr/local/val/mysql/
$ sudo rm -rf db_name

あとはデータベースを作りなおせば良い:

rake db:create