Johnman.md

プログラミングのことや個人的なことを書きます。たぶん。

CircleCIでMySQLが起動できなくなる問題のまとめ

起きたこと

2021/03/18の午前中から、circleci/mysqlイメージを使っていたジョブが動かなくなるという問題が起きていました。

出力されるエラーは下記。

2021-03-18 01:32:50+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.33-1debian10 started.
2021-03-18 01:32:50+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2021-03-18 01:32:50+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.33-1debian10 started.
2021-03-18 01:32:50+00:00 [ERROR] [Entrypoint]: MYSQL_USER="root", MYSQL_PASSWORD cannot be used for the root user
    Use one of the following to control the root user password:
    - MYSQL_ROOT_PASSWORD
    - MYSQL_ALLOW_EMPTY_PASSWORD
    - MYSQL_RANDOM_ROOT_PASSWORD

Exited with code 1
CircleCI received exit code 1

原因

これはMySQLのDockerイメージが更新されたことが原因です。該当のPRはこちら。

https://github.com/docker-library/mysql/pull/749

entrypoint内ですでにrootユーザーを作成しているので、重複してrootユーザーを作成してしまわないようにととられた対策なのかな?

そして、circleci/mysql内で MYSQL_USER=root を指定しているので、今回の変更にひっかかってしまい、エラーになっていました。

暫定対応

問題になっているバージョンが5.7系だと circleci/mysql:5.7.33 だったので、circleci/mysql:5.7.32 を使うことでひとまず動くようになりました。

恒久対応

そもそもの原因は circleci/mysqlMYSQL_USER=root が使われていることなので、これを削除すれば動くようになるはずです。

これに関しては、すでにPRが出ていました。

https://github.com/circleci/circleci-images/pull/540

マージされたようなので、imageが公開されれば今まで通り動くようになりそうです。

まとめ

とりあえず今は5.7.32を使うことで凌いでいます。

原因を調べる中でTwitterも参考にしましたが、同じ問題にぶつかっている人がたくさんいると安心しますね。


追記(2021/03/19 08:45)

docker imageも更新されていたので、今まで通りの設定でcircleci/mysql:5.7が動くようになってました。よかった。

もちろんconfig.ymlの中で MYSQL_USER=root と指定しちゃうと落ちるので、そこは気をつけないとだめですね。