MariaDB/MySQL 报错解决:ERROR 1698 (28000): Access denied for user 'root'@'localhost'

我在安装好MariaDB后,发现一个问题:我必须用root用户才能登录数据库,普通用户不能登录数据库,会报错:

-> % mysql -h localhost -u root -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

查询权限:

MariaDB [(none)
MySQL 错误 `ERROR 1698 (28000): Access denied for user 'root'@'localhost'` 通常出现在使用较新版本的 MySQLMariaDB 时,特别是在 Ubuntu 系统中。该错误的核心原因是 `root` 用户的认证插件配置不当,或者未正确设置密码。 以下是解决该问题的完整步骤: ### 1. 使用 `sudo` 登录 MySQL 由于 `root` 用户无法直接登录,可以使用系统管理员权限登录 MySQL: ```bash sudo mysql -u root ``` ### 2. 修改 `root` 用户的认证方式 在 MySQL 中,`root` 用户默认可能使用 `auth_socket` 插件进行认证,这会导致密码认证失效。需要将其更改为 `mysql_native_password` 插件: ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password'; ``` ### 3. 刷新权限 修改完成后,刷新权限以确保更改生效: ```sql FLUSH PRIVILEGES; ``` ### 4. 退出并重新登录 退出当前会话,并尝试使用新密码重新登录: ```sql exit; ``` 然后运行: ```bash mysql -u root -p ``` 输入新设置的密码即可登录。 ### 5. 验证用户表中的认证方式 如果仍然无法解决问题,可以直接更新 `mysql.user` 表中的认证信息: ```sql USE mysql; UPDATE user SET authentication_string=PASSWORD('your_new_password'), plugin='mysql_native_password' WHERE User='root'; FLUSH PRIVILEGES; ``` ### 6. 检查 MySQL 服务状态和端口占用 如果 MySQL 服务未运行或端口被占用,也可能导致连接问题。检查 MySQL 服务状态: ```bash systemctl status mysql ``` 如果服务未运行,启动 MySQL: ```bash sudo systemctl start mysql ``` 检查 3306 端口是否被占用: ```bash netstat -tuln | grep 3306 ``` 如果发现端口被其他进程占用,可以使用以下命令查找并终止占用进程(以 PID 为例): ```bash taskkill /PID 19184 /F ``` ### 7. 重新配置 MySQL 如果上述方法无效,可以尝试重新配置 MySQL: ```bash sudo dpkg-reconfigure mysql-server ``` 这将重新引导你完成 MySQL 的配置过程,包括设置 `root` 用户密码。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值