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