概要
ついさっきまで動いていたはずの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を消す方法が最も簡単だったかもしれません。
本番環境では使えないやり方だと思うので、本番環境で行うときは慎重になりたいですね、、、

