SQLSTATE[HY000] [2054] の対処法

MySQLのロゴ画像
  • URLをコピーしました!

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;

 

すると、以下のような結果が返って来ると思います。

 

mysqlのユーザ情報の確認

 

「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)

 

変更後、もう一度認証方式を確認してみると、

 

認証方式変更後のmysqlユーザ情報の確認

 

無事に変更できました。

 

 

新規ユーザの認証方式の変更

 

次に、新規作成時のユーザの認証方式を変更します。

 

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になります。

 

 

参考URL

MySQL8.0 認証方式を変更する(Laravel5)

この記事を書いた人

コメント

コメント一覧 (1件)

コメントする

目次