MySQLでPlugin 'mysql_native_password' is not loadedが発生しログインできない時の対処法
はじめに
MySQL に mysql -u root -p
でログインしようとしたら、
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded
というエラーメッセージが表示されて、ログインできなくなってしまいました。
これは、MySQLのデフォルトの認証プラグインが mysql_native_password
からcaching_sha2_password
へ変更されたためです。
本記事には、Homebrew環境でこのエラーによりログインできなくなった場合の対処法についてまとめます。
対処法
STEP1. MySQLの起動状態を確認する
まずは、MySQLサーバーが正常に起動しているかを確認しましょう。
brew services list
Name Status User File
mysql started hiromichi ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
上記のようにmysql
のStatus
がstarted
になっていれば正常に起動しています。
STEP2. rootユーザーの認証プラグインを確認する
もし他のユーザーでMySQLにログインできる場合は、以下のクエリを実行することで、rootユーザーの認証プラグインを確認できます。
mysql> SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
+------+-----------+-----------------------+
| user | host | plugin |
+------+-----------+-----------------------+
| root | localhost | mysql_native_password |
+------+-----------+-----------------------+
plugin
がmysql_native_password
であれば、このエラーの原因となっている可能性が高いです。
どのユーザーでもMySQLにログインできない場合
私の場合は他のユーザーでもログインできなかったため、以下の方法を取りました。
まず、homebrewで起動しているSQLを終了します。
brew services stop mysql
次に、別のターミナルで以下のコマンドを実行して、認証をスキップしてMySQLを起動します。
mysqld --skip-grant-tables --user=`whoami` &
上記のコマンドを実行したターミナルとは別の新しいターミナルで、以下のコマンドを実行してMySQLにrootユーザーでログインします。
mysql -u root
パスワードは不要です。ログインに成功したら、上記の SELECT クエリを実行し、認証プラグインを確認してください。
STEP3. 認証プラグインを変更する
YOUR_PASSWORD
を設定したいパスワードに置き換えて、以下のクエリを実行します。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'YOUR_PASSWORD';
FLUSH PRIVILEGES;
実行後はexit
で終了します。
続いて、mysqld --skip-grant-tables...
を実行したターミナルに戻り
killall mysqld
でプロセスを停止します。
STEP4. ログインできるようになったことを確認する
ここまででrootユーザーの認証プラグインをcaching_sha2_password
に変更できました。
まず、コマンドでMySQLを起動します。
brew services start mysql
次に、設定したパスワードでログインします。
mysql -u root -p
念の為、以下のコマンドを実行すると、認証プラグインが変更できたことがわかります。
mysql> SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
+------+-----------+-----------------------+
| user | host | plugin |
+------+-----------+-----------------------+
| root | localhost | caching_sha2_password |
+------+-----------+-----------------------+
補足
セキュリティの観点からは非推奨ですが、mysql_native_passwordを有効にすることで、認証プラグインを変更せずにMySQLにログインすることができます。
Homebrewでインストールした場合、/opt/homebrew/etc/my.cnf
(ない場合は、/usr/local/etc/my.cnf
にあるかもしれません)にあるmy.cnf
を以下のように編集します。
[mysqld]
mysql_native_password=ON
なお、MySQL 8.4 Reference Manualでは--mysql-native_password=ON
をつけることでも、認証プラグインを変更せずにMySQLにログインできると書かれていますが、HomebrewでインストールしたMySQLではbrew servicesの設定ファイルを編集することになるため、本記事では省略します。
Discussion