[MySQL] Unable to load authentication plugin 'caching_sha2_password'

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

そして再度アクセスすると…

接続成功

いけた!

いやあ、久しぶりに使おうとしたらアクセスできなかったので、焦ったぜ。

参考