MySQLを解決するERROR 1698(28000):Access denied for user'root'@'localhost'


LinuxにMySQLをインストールしたばかりの多くのユーザーがこの問題に直面していると信じていますが、いったいどうすればいいのでしょうか.私はstackoverflowで答えを見つけ(私は方法1を使って非常に有効です)、運んできたついでに中国語に訳しました.
原文住所:https://stackoverflow.com/questions/39281594/error-1698-28000-access-denied-for-user-rootlocalhost
質問概要:rootユーザーを介してMySQLデータベースにログインすると、「ERROR 1698(28000):Access deniedfor user‘root’@‘localhost’」というエラーメッセージが表示されました.
回答:
なぜなら、最近のUbuntuインストール(もちろん他のインストールも可能)では、MySQLがUNIX auth_をデフォルトで使用しているからです.socket pluginプラグイン.
簡単に言えばdb_usersがデータベースを使用する場合、システムユーザー認証テーブルを介して認証されます.次のコマンドでrootユーザーがこのように設定されているかどうかを確認できます.
$ sudo mysql -u root # I had to use "sudo" since is new installation

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

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

クエリー文で見たようにrootユーザーはauth_を使用していますソケットプラグイン.この問題を解決するには2つの方法があります.
1.rootユーザーがmysqlを使用するように設定できます.native_passwordプラグイン2.システム・ユーザーと一致する新しいデータベース・ユーザーを作成できます(推奨)
(筆者注:方法2はauth_socketプラグインの要件を満たす)
選択1:
$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

選択2(YOUR_SYSTEM_USERの代わりにオペレーティングシステムのユーザー名を使用):
$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

使い方2を選択した場合は、オペレーティングシステムのユーザー名を使用してMySQL(mysql-u YOUR_SYSTEM_USER)に接続する必要があります.
注意:Debian系などのオペレーティングシステムでは「auth_ソケットプラグインはunixと呼ばれていますsocket'なので、対応するSQLコマンド文はUPDATE user SET plugin='unix_socket’ WHERE User=‘YOUR_SYSTEM_USER’.