MySQL 报错 ERROR 1698 (28000): Access denied for user 'root'@'localhost' 通常是因为 root 用户在 MySQL 中的身份验证配置问题。这个错误通常发生在 MySQL 8.0 及更高版本中,因为它们默认使用 auth_socket 插件来验证 root 用户,而不是密码。
解决步骤
步骤一:使用 sudo 登录 MySQL
因为 root 用户受到 auth_socket 插件的保护,你需要使用 sudo 来登录 MySQL:
sudo mysql -u root
步骤二:检查当前的身份验证插件
检查 root 用户使用的身份验证插件:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
你应该看到类似的输出,显示 root 用户使用 auth_socket 插件:
+------+-----------+-------------+
| user | host | plugin |
+------+-----------+-------------+
| root | localhost | auth_socket |
+------+-----------+-------------+
步骤三:更改身份验证插件为 mysql_native_password
如果你想使用密码来进行身份验证,可以将 root 用户的插件更改为 mysql_native_password 并设置新密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password';
FLUSH PRIVILEGES;
将 your_new_password 替换为你希望设置的新密码。
步骤四:退出 MySQL
执行完更改后,退出 MySQL:
EXIT;
步骤五:使用新密码登录
现在,你应该能够使用新设置的密码登录 MySQL:
mysql -u root -p
输入你刚刚设置的新密码。