概要
ついさっきまで動いていたはずのmysqlコンテナが動かなくなりました。
docker-compose logs
を実行すると以下のようになってました。
試したこと①
なんとなく下記のエラーが怪しいのでは?と思いib_logfile
を削除してみましたがダメでした。
db_1 | 2021-12-18T08:42:07.483929Z 0 [ERROR] InnoDB: redo log file './ib_logfile1' exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log files before creating new system tablespace.
実行の手順
$ docker-compose run db bash
$ cd /var/lib/mysql
$ rm ib_logfile0
ここでib_logfile1
も削除していればうまくいったかもしれません。
試したこと②
すでに存在するmysqlのコンテナや、イメージが多すぎてエラーが起こっているのではと考えました。
よって存在するコンテナを全て削除
docker rm `docker ps -a -q`
mysqlのイメージを削除
docker rmi <mysqlのイメージ>
そして再度build
docker-compose build
docker-compose up -d
しかしうまくいきません。
解決した方法
docker-compose.yml
のdb
の./db-data:/var/lib/mysql
に着目しました。
もう、db-data
を一度最初から作るしかないと考えました。
自分のパソコン側のdb-data
というファイルの名前をdb-data.sub
にしました。
それによってdocker-compose up -d
で新たなdb-data
が作られました。
そして下記コマンドで元通りにできました。
docker-compose up -d
docker-compose run api rails db:create
docker-compose run api rails db:migrate
docker-compose run api rails db:seed
おそらく①でib_logfile1
ib_logfile0
を消す方法が最も簡単だったかもしれません。
本番環境では使えないやり方だと思うので、本番環境で行うときは慎重になりたいですね、、、