mysql8 エラー「ERROR 1698 (28000): Access denied for user ‘root’@’localhost’」が発生した場合の対処法

mysql8 エラー「ERROR 1698 (28000): Access denied for user ‘root’@’localhost’」が発生した場合の対処法

mysqlでmysql_secure_installationを実行して作成したrootのパスワードでログインできなかったため、その原因と対処法を記述してます。

環境

  • OS ubuntu 20.04.1
  • mysql 8.0.21

エラー全文

rootでログインしようとした際に発生。
mysql_secure_installationで作成したパスワードを入力しても入れない

mysql -u root -p

<出力結果>
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

原因

rootユーザーの認証方式が「auth_socket」になっているため。
「auth_socket」になっていると、mysql -u 実行時に指定されているユーザ名が、Ubuntuにログイン中のユーザ名と同じでなければいけない。

mysql> SELECT User, Host, plugin FROM mysql.user;

<出力結果>
+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| debian-sys-maint | caching_sha2_password |
| mysql.infoschema | caching_sha2_password |
| mysql.session    | caching_sha2_password |
| mysql.sys        | caching_sha2_password |
| root             | auth_socket           |
+------------------+-----------------------+

「caching_sha2_password」は、mysql8から追加された新しい認証方式。

mysql8以降では、デフォルトの設定となっている。

対処法

sudoでログインする

sudo mysql -u root -p

または、sudoなしであれば、rootの認証方式を変更する

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

または

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

※mysql8 デフォルト認証方式「caching_sha2_password」を変更する方法はこちら