LaradockのMySQLのバージョンは、デフォルトだと最新(MYSQL 8.0)になっています。
MYSQL_VERSION=latest
MYSQL8.0ではログイン認証方式に caching_sha2_password がデフォルトで設定されています。
しかし、PHPのMySQL接続ライブラリはこれに対応していないらしいです。
試しに、migrateしてみたりphpMyAdminでログインしようとすると、以下のエラーが出ます。
mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client
なので、認証方式をmysql_native_password に戻してあげましょう。
目次
既存ユーザの認証方式の変更
mysqlコンテナに入り、rootユーザの認証方式を確認してみましょう。
$ docker-compose exec mysql bash /# mysql -u root -proot mysql> SELECT user, host, plugin FROM musql.user;
すると、以下のような結果が返って来ると思います。
「plugin」の欄に書かれているのがログイン認証方式です。
rootユーザの認証方式がcaching_sha2_passwordになっているのが確認できます。
以下のコマンドで、認証方式をmysql_native_passwordに変更します。
mysql> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; Query OK, 0 rows affected (0.01 sec)
変更後、もう一度認証方式を確認してみると、
無事に変更できました。
新規ユーザの認証方式の変更
次に、新規作成時のユーザの認証方式を変更します。
exitでmysqlの対話モードを終了してから、etc/mysql/my.cnf を編集します。
mysql> exit Bye /# cd etc/mysql /etc/mysql# vim my.cnf
このとき、vimが入ってない場合は先にインストールしておきましょう。
/# vim hogehoge bash: vim: command not found /# apt-get update /# apt-get install vim
my.cnf を開いたら、最後の行に以下を追加して保存します。
default_authentication_plugin=mysql_native_password
以上です。これで、次回から新しくユーザを作った際に、認証方式が自動でmysql_native_passwordになります。
コメント
コメント一覧 (1件)
[…] ログイン時に上記のエラーが出る場合は、こちらの記事を参照してください。 […]