【Docker】MySQLコンテナで使用するイメージを5系から8系に変える時の注意

MySQLのイメージを5.78.0に切り替えた所、MySQLのコンテナが起動できないエラーが発生しましたので、その時の対処方法を記載します。 おそらく、稼働中にMySQLのバージョンを5系からアップグレードしたい場合でも発生する可能性があります。

状況

下記の様な構成にしていました。

.
├── docker 
│   └── db
|       └── Dockerfile   
└── docker-compose.yml

docker-compose.yml

version: "3.7"
services:
  db:
    build: docker/db
    ports:
      - 3306:3306
    environment:
      MYSQL_DATABASE: db
      MYSQL_ROOT_PASSWORD: pass

Dockerfile

FROM mysql:5.7

再現手順

ます、MySQLの5.7のイメージを使用してコンテナをビルドします。
その後、Dockerfileを次の様に、8系の安定版に変えてビルドします。

FROM mysql:8.0.16

この状態でdocker-compose upします。

エラー内容

MySQLのDockerイメージを、dbというコンテナで起動しているのですが、次の様にエラーが出力されてコンテナが止まって(閉じて)しまいます。

$ docker-compose
# 省略
db_1   | 2019-05-31T03:35:06.188985Z 1 [ERROR] [MY-012526] [InnoDB] Upgrade after a crash is not supported. This redo log was created with MySQL 5.7.26. Please follow the instructions at htt
p://dev.mysql.com/doc/refman/8.0/en/upgrading.html
db_1   | 2019-05-31T03:35:06.189016Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.
db_1   | 2019-05-31T03:35:06.690818Z 1 [ERROR] [MY-011013] [Server] Failed to initialize DD Storage Engine.
db_1   | 2019-05-31T03:35:06.691041Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
db_1   | 2019-05-31T03:35:06.691184Z 0 [ERROR] [MY-010119] [Server] Aborting
db_1   | 2019-05-31T03:35:06.696164Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.16)  MySQL Community Server - GPL.

原因

公式のページで原因を確認できるページが見つからないため憶測です。
ご了承下さい。


MySQLのメジャーアップデートで、システムの構成が変わったのかもしれません。
新しいバージョンを正常に上書きできなかったようです。

Upgrade after a crash is not supported. This redo log was created with MySQL 5.7.26. Please follow the instructions at.
http://dev.mysql.com/doc/refman/8.0/en/upgrading.html

参考ページ

公式解説ページではありませんが、同じ様なエラーが起こっている人はいる様です。
過去バージョンを削除してから、新しいバージョンを導入する事で解決できるとの事なので、バージョン間の問題の様です。

superuser.com

対応方法

作ったコンテナを削除してから、再度ビルドしたところ解決しました。
docker-compose build --no-cacheでキャッシュを使わない状態でビルドしても解決しませんでしたので、削除するのが良いのかもしれません。

$ docker ps -a

# コンテナIDを確認
CONTAINER ID
57f700157a84

$ docker rm 57f700157a84

©︎2017-2018 WebSandBag