SQLSTATE[HY000] [2054] の対処法

LaradockのMySQLのバージョンは、デフォルトだと最新(MYSQL 8.0)になっています。
1 |
MYSQL_VERSION=latest |
MYSQL8.0ではログイン認証方式に caching_sha2_password がデフォルトで設定されています。
しかし、PHPのMySQL接続ライブラリはこれに対応していないらしいです。
試しに、migrateしてみたりphpMyAdminでログインしようとすると、以下のエラーが出ます。
1 |
mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client |
なので、認証方式をmysql_native_password に戻してあげましょう。
既存ユーザの認証方式の変更
mysqlコンテナに入り、rootユーザの認証方式を確認してみましょう。
1 2 3 |
$ 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に変更します。
1 2 |
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 を編集します。
1 2 3 4 |
mysql> exit Bye /# cd etc/mysql /etc/mysql# vim my.cnf |
このとき、vimが入ってない場合は先にインストールしておきましょう。
1 2 3 4 |
/# vim hogehoge bash: vim: command not found /# apt-get update /# apt-get install vim |
my.cnf を開いたら、最後の行に以下を追加して保存します。
1 |
default_authentication_plugin=mysql_native_password |
以上です。これで、次回から新しくユーザを作った際に、認証方式が自動でmysql_native_passwordになります。