mysql 登录报错:ERROR 1045(28000):Access denied for user ‘root‘@‘localhost‘ (using password Yes)

本文主要针对用户名、密码正确,但是登录不了mysql的问题的分析与解决。其他情况可再参考其他的贴子或资料,本文中不会再做过多介绍。

一:报错图片信息

问题分析:

提示信息翻译:错误 1045(28000):用户 'root'@'localhost' 的访问被拒绝(使用密码:是)

从翻译过来的错误信息中,我们可知数据库拒绝了我们的访问,才导致我们不能正常访问它。那么究竟是什么原因导致它给我们反馈了这个提示信息呢?我查阅了一些贴纸,出现这种问题的原因有以下:

  1. 用户密码或用户信息错误

  2. 缺少权限

3......(其他后续)

但是根据我的实际情况,我的问题原因不在以上之列,所以还是得具体问题,具体分析。我这里遇到的问题是用户名、密码正确,但是登录mysql却登录不了,总是返回用户访问被拒绝,也就是上边图片中的错误。

二:问题分析

  1. 根据我出现的问题,我猜测可能是密码过期了,于是我想尽办法去修改用户密码(根据各种up主提供的材料),但最终还是没有解决。

  2. 查询用户

用过跳过mysql的方式,进入数据库后,使用以下语句查询用户信息

复制代码
select user,host from user;

查询后发现,user表中没有了root 用户,因此导致了使用root用户登录系统被拒绝。那么是什么原因导致了root用户丢失呢?

三:解决办法

针对丢失了root用户导致mysql登录被拒绝的问题的解决办法

  1. 停止mysql服务

    net stop mysql

2.在my.ini中增加skip-grant-tables 参数,如果启动服务后服务又立即停止,则需要增加shared-memory 参数 ,此步骤主要是为了免密登录mysql(PS 此步骤可以直接 在cmd中直接输入:mysqld --console --skip-grant-tables --shared-memory)

(1)在my.ini中配置(shared-memory在启动服务后如果服务自动停止)

(2)在命令行编辑器中直接使用mysqld --console --skip-grant-tables --shared-memory

以上两种都能够免密进入到mysql,只是第二种需要一个单独的命令行编辑器中启动,并且不能关闭命令行编辑器。可根据实际情况进行选择

  1. 使用mysql -u root 命令直接进入mysql中
  1. 进入mysql后,需要使用use mysql命令切换到mysql数据库
  1. 进入mysql后,使用select user,host from user;语句查询用户表中有哪些用户,正常情况下user表中应包含以下用户信息:

如果查询的结果中没有root用户,则root用户可能已经丢失了。

此时可使用以下命令创建root 用户

复制代码
# 创建sql
create user 'root'@'localhost' identified by '123456';
# 如果执行此语句报错,提示"The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement" 此时需要使用flush privileges;语句刷新,刷新后可执行create 语句。
# 当然如果不使用create 创建,那么可以使用insert into 语句将用户信息插入user表内,具体如下:
insert into user(User,authentication_string,ssl_cipher,x509_issuer,x509_subject) values('root','','','','');

6 分配权限:

复制代码
# 分配权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@localhost WITH GRANT OPTION;
  1. 更新user表(设置mysql允许其他主机访问)

    update user set host='%' where user='root';

更新成功后建议使用flush privileges;刷新一下

以上步骤完成后使用quit退出mysql,然后停止mysql服务,在配置文件中注释掉之前加的参数(如果是直接采用在cmd中输入mysqld --console --skip-grant-tables --shared-memory的方式进入的,直接关闭当前的cmd窗口,然后启动服务即可),然后再启动服务。当mysql服务重新启动成功后,使用mysql -u root -p 并输入密码的方式可成功访问mysql

四:mysql设置密码永久不过期

此章节,主要用户验证以上问题是否是密码过期问题导致

复制代码
# 设置密码永久不过期
alter user 'root'@'localhost' password expire never;
# 注意 如果host被更改为% ,则需要使用以下语句进行设置,否则系统会报"ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'"的错误
alter user 'root'@'%' password expire never;
相关推荐
倔强的石头_8 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
阿巴斯甜13 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker14 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq952715 小时前
Andorid Google 登录接入文档
android
黄林晴16 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android