MySQL8.0にしたらエラーが起こった
エラー内容
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
解決方法はこれ↓
MySQL8.0以降で接続できない場合は「認証プラグイン」を変更する
記事の抜粋
MySQL8.0以降では認証プラグインがデフォルトでは「caching_sha2_password」となっています。その為、PHP/Ruby/Pythonなどのプログラム言語から接続できない場合があります。
認証方式の確認
mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| my-home-page | % | caching_sha2_password |
| root | % | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
認証方式の変更
mysql> ALTER USER 'my-home-page'@'%' IDENTIFIED WITH mysql_native_password BY 'パスワード';
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'パスワード';
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'パスワード';
mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| my-home-page | % | mysql_native_password |
| root | % | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
root
を変えたいのであればtest
の部分をroot
などの任意のものに指定する。
事前の対策
/etc/my.cnf
に書きを追記
[mysqld]
default-authentication-plugin = mysql_native_password
余談
僕はLaravelのphp artisan migrate
した時に起こりました。
エラー内容やキーワードを詰め込んだので同じ様に困った人がこの記事にたどり着いて問題を解決してくれるといいな。