#はじめに
エラーに苦戦したため、解消方法を忘れないように備忘録として記述します。
もし参考になれば幸いです。
環境
現在のバージョン:
macOS Catalina 10.15.6
環境
ruby '2.5.8'
ruby on rails '5.2.2'
docker
MySql 5.7.33
背景
新しくgit branchを作成後PCをシャットダウンさせて再度開発をする際にlocalhost:3000でページ確認をしたところ下記エラーが発生。
ActiveRecord::StatementInvalid: Mysql2::Error: Tablespace 'データベース名.テーブル名' exists.: CREATE TABLE テーブル名 (version varchar(255) NOT NULL PRIMARY KEY)
調べてみたところ何らかの原因でデータベースの情報に相違があった、壊れているなどが原因とのこと。
ターミナルで下記を実行したが同様エラーで先に進めない
$ docker-compose run web rails db:migrate:status
$ docker-compose run web rails db:migrate
$ docker-compose run web rails db:migrate:reset
解消方法
###①〜⑦対象のデータベース名を削除して再構築
①コンテナの一覧を表示してデータベース名の確認
$ docker-compose ps #コンテナの一覧確認
②Dockerのデータベースコンテナに接続
$ docker exec -it データベース名 /bin/bash
#データベース名は【①】の際に表示されたmysqlのNAMESに記載されている
③mysqlに入る
mysql -u root -p
#passwordはdocker-compose.ymlに記載されている
④mysqlデータベース表示
mysql> show databases;
⑤エラーに表示されていたデータベース削除しかし削除できず
DROP DATABASE データベース名;
ERROR 1010 (HY000): Error dropping database (can't rmdir './データベース名', errno: 39)
⑥データベースの場所(パス)を確認してコマンドで削除
mysql> show variables like 'datadir';
パスを確認
$ docker-compose rm -rf /usr/local/var/mysql/データベース名
#確認したパスを使ってコマンドから削除
⑦その後データベース再構築したがコマンドが反応しない
$ docker-compose run web rails db:migrate:create →OK
$ docker-compose run web rails db:migrate:status →エラー
$ docker-compose run web rails db:migrate →エラー
$ docker-compose run web rails db:migrate:reset →エラー
###⑧、⑨データ永続化フォルダを削除してビルド後db:migrate
⑧データ永続化フォルダを削除
docker/mysql/volumesフォルダを削除する
※永続化ファイルを置いてある箇所なので個々で異なります
⑨ファイルの編集した為ビルド後db:migrateしたらエラー解消されていた
$ docker-compose build
$ docker-compose run web rails db:migrate
あくまでエラー解消の一例ですのでご参考になれば幸いです。