ERROR 1698 (28000): Access denied for user 'root'@'localhost' 错误通常发生在使用 UNIX socket 认证的 MySQL 上,这意味着 MySQL 尝试使用系统用户认证而不是传统的用户名和密码认证。
以下是几种解决此问题的方法:
方法 1: 使用 sudo 登录 MySQL
如果 MySQL 使用 UNIX socket 认证,你可以通过 sudo 提升权限登录 MySQL:
bash
sudo mysql -u root
方法 2: 修改 root 用户的认证方式
如果希望使用密码认证而不是 UNIX socket 认证,可以按照以下步骤修改 root 用户的认证方式:
-
使用
sudo登录 MySQL:bashsudo mysql -u root -
切换到
mysql数据库:sqlUSE mysql; -
修改
root用户的认证方式:sqlALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password'; -
刷新权限:
sqlFLUSH PRIVILEGES; -
退出 MySQL:
sqlEXIT;
现在,你应该能够使用密码登录 MySQL:
bash
mysql -u root -p
方法 3: 重置 root 用户的密码
如果你仍然无法访问 MySQL,可能需要重置 root 用户的密码:
-
停止 MySQL 服务:
bashsudo systemctl stop mysql -
以跳过权限表的模式启动 MySQL:
bashsudo mysqld_safe --skip-grant-tables & -
登录 MySQL:
bashmysql -u root -
重置
root用户的密码:sqlFLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; -
退出 MySQL:
sqlEXIT; -
停止 MySQL 安全模式:
bashsudo mysqladmin -u root -p shutdown -
重新启动 MySQL 服务:
bashsudo systemctl start mysql
现在,你应该能够使用新密码登录 MySQL:
bash
mysql -u root -p