暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

MySQL忘记密码skip-grant-tables依然不行

原创 进击的CJR 2022-02-09
2060

mysql忘记密码了,一般步骤如下

1) 停库systemctl mysqld stop

2)启库跳过鉴权

 mysqld_safe --skip-grant-tables --skip-networking &

 --skip-grant-tables 跳过数据库权限验证

 --skip-networking 该变量控制是否关闭TCP/IP连接,默认允许,如果启用,则只能本地socker连接。 如果只是本地客户端连接,强烈建议开启。

 3)修改密码

alter user root@'localhost' identified by '123456';

 4)重启库

pkill mysqld

systemctl start mysqld

 

密码忘记,登录报密码错误

 

使用skip-grant-tables方式跳过密码验证

发现依然无法登录

 

可能情况,执行了flush privileges;

原因分析:

设置skip-grant-tables  则会将acl_init (dont_read_acl_tables=true) 该值设置为true,不进入鉴权,也就是不进行密码验证,而一旦执行flush privileges

flush privileges会重新加载acl_reloadacl_reload会将 dont_read_acl_tables=false 该值设置为flase,而再次构建内存数组acl_users,等价于又进入了密码鉴权,所有有了如上密码报错。

 

补充:

flush privileges命令的作用就是清空MySQL内存中acl_users数组的数据内容,重新从mysql.user表中加载用户的权限信息。 所以当我们不是通过create user、grant 、revoke、drop命令来操作用户和权限,而是通过update语句直接去修改了mysql.user表中的数据的时候,MySQL内存中的acl_users数据信息是没有被更新的

,所以此时我们想让我们对mysql.user表的修改直接生效,就需要手动的去更新acl_users数组的信息,而这个更新内存权限信息的操作,也就是通过flush privileges;命令来实现的。

 

复现:

 

最后修改时间:2022-03-25 00:19:34
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
2人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论