Docker で MySQL を起動して接続しようとしたらUnable to load authentication plugin 'caching_sha2_password
というエラーに遭遇した。
動作環境
- Linux Mint 19
- docker 18.06.0-ce
- mysql 8.0.4
現象
まずいつものように Docker で MySQL を起動する。
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql |
もしくは既にコンテナ作成済みなら以下のように start させる。
$ docker start mysql |
すると Docker 上で MySQL が起動する。ここは問題ない。
その後 DB クライアント(今回はDBeaverを使う)からアクセスしようとすると、以下のエラーになる。
原因
まあ Docker が原因ではないと思っていたが、MySQL のバージョン 8 からはデフォルトの認証方式が変わったらしい。
MySQL の設定(mysql.userテーブルのpluginカラム
)を直せば良いようだが、Docker で MySQL コンテナを作成する度に設定を直すのは大変なので、簡単に回避できる策を探す。
……
と、スタックオーバーフローでそれっぽいのを発見した。
これによると--default-authentication-plugin=mysql_native_password
オプションをつけて起動すると良いみたいだ。
一度コンテナを捨てて、下記コマンドで再作成してみる。
docker run --name mysql -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql --default-authentication-plugin=mysql_native_password |
そして再度アクセスすると…
いけた!
いやあ、久しぶりに使おうとしたらアクセスできなかったので、焦ったぜ。