【Docker】MySQLをアップグレードしたらハマった話
Jenkinsでコンテナでの分散ビルドを実行するためにDockerの接続設定を変更したらデーモンが起動しなくなってDockerを再インストールしてdocker-composeを立ち上げたらこのブログデータが入っているMySQLコンテナが立ち上がらなくなってというへっぽこエンジニア特有の負のスパイラルを繰り返してしまったので備忘録として残しておきます。
エラー内容
WordPress側のログに以下のような内容が大量に出力されていたのが決定打となりました。
Warning: mysqli::__construct(): The server requested authentication method unknown to the client [caching_sha2_password] in Standard input code on line 22
タネ明かし
MySQLのバージョンを8.0まで上げてしまったのが原因でした。どうやら8.0からデフォルトのユーザ認証方式が変わったようで、パスワードでログインできなくなってしまったみたいです。
対策
何の捻りもありませんがパスワードによるログインを許可します。
まず docker-compose.yml
に command
を追記します。
wpmysql:
image: mysql:8.0
container_name: WordPressDB
command: '--default-authentication-plugin=mysql_native_password'
privileged: true
restart: always
# 以下略
コンテナを起動してMySQLにログインします。
$ docker exec -it WordPressDB /bin/bash
DBに接続します。
$ mysql -u root -p
WordPressユーザのプラグインを変更します。
mysql> alter user 'USERNAME'@'%' identified with mysql_native_password by 'PASSWORD';
これでWordPressが表示されるようになりました。めでたしめでたし。