ZBLOG

连接数据库时出现错误:Access denied for user 'root'@'localhost'如何解决

解决 MySQL/MariaDB ‘Access denied for user ‘root’@‘localhost” 错误

当您遇到 “Access denied for user ‘root’@‘localhost’” 错误时,这表示数据库拒绝了 root 用户的连接请求。以下是完整的解决方案:

常见原因

  1. 密码错误
  2. root 用户权限配置问题
  3. auth_socket 插件认证方式(仅限某些Linux系统)
  4. MySQL服务未运行

解决方案

方法一:使用默认密码登录(适用于新安装)

sudo mysql -u root

如果这能工作,说明系统使用了 auth_socket 认证方式。

方法二:重置 root 密码(需要管理员权限)

  1. 停止MySQL服务

    sudo systemctl stop mariadb    # MariaDB
    # 或
    sudo systemctl stop mysql      # MySQL
    
  2. 以安全模式启动

    sudo mysqld_safe --skip-grant-tables &
    
  3. 连接到MySQL

    mysql -u root
    
  4. 更新root密码(MariaDB/MySQL版本不同):

对于 MariaDB:

   FLUSH PRIVILEGES;
   ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';

对于 MySQL 5.7+:

   UPDATE mysql.user SET authentication_string=PASSWORD('你的新密码') WHERE User='root';
   FLUSH PRIVILEGES;
  1. 退出并重启服务: “`sql exit;

然后执行:

首先结束安全模式进程:

查找进程ID:

ps aux | grep mysqld_safe

kill -9 [进程ID]

然后正常启动服务:

sudo systemctl start mariadb/mysql


###方法三:检查用户权限

```sql 
--查看root用户是否存在及权限 
SELECT Host,User,plugin FROM mysql.user WHERE User='root'; 

--如果缺少本地访问权限 
CREATE USER 'root'@'localhost' IDENTIFIED BY 'password'; 
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; 
FLUSH PRIVILEGES; 

--如果是auth_socket问题(Ubuntu常见) 
UPDATE mysql.user SET plugin='mysql_native_password' WHERE User='root'; 
FLUSH PRIVILEGES; 

###方法四:配置文件修改

编辑 /etc/mysql/my.cnf (或 /etc/my.cnf) ,在 [mysqld]部分添加:

skip-grant-tables 

重启服务后即可无密码登录,记得完成修复后移除该行!


##预防措施

1.创建专用管理账户代替root日常使用:

CREATE USER 'admin'@'%' IDENTIFIED BY '强密码'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@ '%';  

2.定期备份用户权限表:

mysqldump -uroot -p mysql user > user_backup.sql  

遇到具体报错细节可提供完整错误信息进一步诊断!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23899

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?