本文主要针对用户名、密码正确,但是登录不了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,只是第二种需要一个单独的命令行编辑器中启动,并且不能关闭命令行编辑器。可根据实际情况进行选择
3. 使用mysql -u root 命令直接进入mysql中
4. 进入mysql后,需要使用use mysql命令切换到mysql数据库
5. 进入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;
7. 更新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;
本文链接:https://hqyman.cn/post/9499.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

