MySQL / MariaDBの新しいバージョン(Debian Stretchなど)でこの動作が発生したユーザーは、mysql.userテーブルに「plugin」という列があることに注意する必要があります。 'unix_socket'プラグインが有効になっている場合、rootはパスワードを必要とせずにコマンドラインからログインできます。他のログインメカニズムは無効になります。
その場合を確認するには:
SELECT host, user, password, plugin FROM mysql.user;
これは次のようなものを返すはずです(unix_socketが有効になっている場合):
+-----------+------+--------------------------+-------------+
| host | user | password | plugin |
+-----------+------+--------------------------+-------------+
| localhost | root | <redacted_password_hash> | unix_socket |
+-----------+------+--------------------------+-------------+
これを無効にして、rootにパスワードの使用を要求するには:
UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;
注: MySQLの新しいバージョン(5.7.xなど)の@marioivangf(コメント内)で指摘されているように、プラグインを(空白ではなく)「mysql_native_password」に設定する必要がある場合があります。
次に再起動します:
service mysql restart
問題が修正されました!:
[email protected] ~# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
出典: https://stackoverflow.com/a/44301734/3363571 @SakuraKinomotoに感謝します(これが役に立ったら、彼の答えに投票してください)。