背景
タイトルにもある通り、Dockerを使って開発を行なう際にmariaDBコンテナが立ち上がらなく解消するまでに時間がかかったのでメモ。
コンテナの構成はよくあるnginx/php/db/phpmyadmin
のような感じ。
ただ、いつもはMySQLを使っていてmariaDBを使うのは初めて。
エラー時の状況
docker-compose.ymlを書いてdocker-compose up -d
。
するとdbコンテナだけがなぜか立ち上がらない…
その時のdbコンテナに関するlogの内エラーは↓の通り。
db | 2022-08-14 7:32:23 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
db | 2022-08-14 7:32:23 0 [Note] InnoDB: Starting shutdown...
db | 2022-08-14 7:32:23 0 [ERROR] Plugin 'InnoDB' init function returned error.
db | 2022-08-14 7:32:23 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
db | 2022-08-14 7:32:23 0 [Note] Plugin 'FEEDBACK' is disabled.
db | 2022-08-14 7:32:23 0 [ERROR] Could not open mysql.plugin table: "Unknown storage engine 'InnoDB'". Some plugins may be not loaded
db | 2022-08-14 7:32:23 0 [ERROR] Unknown/unsupported storage engine: InnoDB
db | 2022-08-14 7:32:23 0 [ERROR] Aborting
InnoDBで何か上手くいっていないようだけど、うーん分からん…
解決に至るまで
エラー文を読んでも理解できなかったので、エラー文そのままでググってみると解決方法が書かれた記事がいくつか出てきたのでそれぞれやってみた。
使っていないボリュームを削除する
これまでに使っていたボリュームが悪さをしているような記事が一番多かった。
対象のvolumeと、ついでに使っていないvolumeも併せて削除。
# Volume の一覧で対象のvolumeを確認
$ docker volume ls
# 対象のvolumeを削除
$ docker volume rm hogehoge
しかし状況は変わらず…
DBの設定を修正する
M1のMacだとinnodb_use_native_aioをオフにしないとInnoDBが起動できない場合があるみたい。
docker-compose.ymlのdbコンテナのところに以下を追加。
command: mysqld --innodb_use_native_aio=0
docker-compose down
&docker-compose up --build
したが変わらず…
※後に分かりましたが、↑で解消する場合は以下のようなエラー文が出ているようです。なので今回のエラーに対しては見当違いな対応でした。
[ERROR] InnoDB: Linux Native AIO interface is not supported on this platform. Please check your OS documentation and install appropriate binary of InnoDB.
mariaDBのバージョンを変えてみる
「特定のバージョンだと上手く起動しない」みたいな記事があったので、ダメ元で変えてみた。
が予想通りエラーは変わらず…
解決した方法
他の案件でmySQLを使っているから、そこと干渉してるのかな。。。とも思って諦めようと思ってましたが、最終的には↓で解決。
https://github.com/MariaDB/mariadb-docker/issues/267
抜粋すると、dbコンテナにマウントするディレクトリ内にib_logfile0
というログファイルがあるのでそれを削除。
これをやった後、docker-compose down
&docker-compose up -d
でmariaDBコンテナが無事に起動!!
github様ありがとう…m(_ _)m