💽

MySQLでPlugin 'mysql_native_password' is not loadedが発生しログインできない時の対処法

2025/01/26に公開

はじめに

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

上記のようにmysqlStatusstartedになっていれば正常に起動しています。

STEP2. rootユーザーの認証プラグインを確認する

もし他のユーザーでMySQLにログインできる場合は、以下のクエリを実行することで、rootユーザーの認証プラグインを確認できます。

mysql> SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
+------+-----------+-----------------------+
| user | host      | plugin                |
+------+-----------+-----------------------+
| root | localhost | mysql_native_password |
+------+-----------+-----------------------+

pluginmysql_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