LoginSignup
0
0

More than 3 years have passed since last update.

【エラー】ActiveRecord::StatementInvalid: Mysql2::Error:

Posted at

はじめに

エラーに苦戦したため、解消方法を忘れないように備忘録として記述します。
もし参考になれば幸いです。

環境

現在のバージョン:
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
mysql> show databases; 

⑤エラーに表示されていたデータベース削除しかし削除できず

mysql
DROP DATABASE データベース名;

ERROR 1010 (HY000): Error dropping database (can't rmdir './データベース名', errno: 39)

⑥データベースの場所(パス)を確認してコマンドで削除
ruby:mysql
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

あくまでエラー解消の一例ですのでご参考になれば幸いです。

0
0
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
0
0