Docker の MySQL 8.0 環境を 5.7 に対応させる

LAMP環境 を構築する自作の Docker Compose で MySQL のバージョンを落としてみました。

ベースは Ambergrease で。

コード

変更箇所を以下に記します。

mysql/docker/Dockerfile

まずは Dockerfile

# disable repository mysql8.0 & enable repository mysql5.7
RUN yum-config-manager --disable mysql80-community && yum-config-manager --enable mysql57-community

rpm から MySQL をダウンロードしてくるのは同じですが、 8.0 を無効化し、代わりに 5.7 を有効化しています。これがないと始まりませんね。

template/mysql/base.cnf

続いて設定ファイル。基本的には一度 5.7 をインストールした環境から設定ファイルを引っ張ってきてそれに手を加える、という形で構築。

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# pid file
pid-file=/var/run/mysqld/mysqld.pid

# language
## lc-messages-dir = /usr/share/mysql-8.0/japanese
lc-messages-dir = /usr/share/mysql/japanese

# error messages
## lc_messages_dir = /usr/share/mysql-8.0
lc_messages_dir = /usr/share/mysql

## collation_server = utf8mb4_ja_0900_as_cs_ks
collation_server = utf8mb4_general_ci

言語パッケージのパスが異なるので注意が必要ですね。後は照合順序が 8.0 で入った照合順序をデフォルトにしていたのでこれも相応のものに変更します。

workspace/entrypoint_db.sh

    # get the init password
##    DB_INIT_PASSWORD=$(sudo grep 'temporary password' /var/log/mysql/mysql-error.log | sudo awk 'END{print $13}')
    DB_INIT_PASSWORD=$(sudo grep 'temporary password' /var/log/mysql/mysql-error.log | sudo awk 'END{print $11}')

ログの出力フォーマットが変わったのか、空白区切りで区切った際に初期パスワードが出現する位置が変わっています。これも変更。


以上の変更で 8.0 用の環境から 5.7 用の環境を作ることができました。

参考

公式

参考記事

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。