MySQL 实战第46讲,我给丁奇大神序章,grant 不生效问题

SQL herman 1022浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

《MySQL 实战45讲》这个专栏写的非常好,但是我们的学习热情,远远的超过了 45 讲的范畴!

最近大家的学习热情都很高,其中群里有一位网友遇到了一个问题。数据库设置了“grant all privileges on . to ‘root’@’%’ identified by ‘password’ with grant option;”为什么远程登录还是看不到库?

show databases

有图有真相,这波骚操作似曾相似。按理说,执行了 grant 命令之后,没有必要跟着执行 flush privileges 命令了。因为,grant 语句都是即时生效的。

即执行 grant 之后,db 和内存都会更新,并且它们是同步的。但现实情况是,我们执行了下面的语句后,我们再远程登录,还是看不到库。

grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;

这其实是一起精进的同学忘记了一个重要的知识点。那就是:

grant 命令对于全局权限,同时更新了磁盘和内存。命令完成后即时生效,接下来新创建的连接会使用新的权限。
对于一个已经存在的连接,它的全局权限不受 grant 命令的影响。

看到,这句我立马问他。是不是旧的连接没权限,新的连接是可以的。

果然,他回复我,是的。但是针对已经存在的连接怎么办呢?

他又想出了一招,重启 MySQL 服务。

这招够狠。重启在程序员届的杀招被他接上了。但是,重启失灵了,重启后,已有的连接还是没权限。具体的表现是,备库上的复制连接还是未权限。

这说明了一个问题,重启 MySQL,内存中的权限并没有刷新。

那怎么办呢?一种方法是,kill 掉已存在的连接。另一种是,主动断开连接,再次重新连接。比如,备库上先把 slave 停止了,重新建立连接。

重新建立连接的时候,会再次的进行权限验证。这样新改变的权限就可以生效了。

有些人可能很诧异,为什么重启了 MySQL 服务,还是不行呢?这是因为,重启 MySQL 服务,根本就没有同步内存和磁盘上权限的逻辑。但是重启 MySQL 服务,MySQL 的配置文件是被重新加载了,这一点是可以肯定的。

我这个第 46 章,并不完美。查阅了很多资料,也没有看到重启 MySQL 服务,到底干了哪些事?这一章,希望丁奇大神能加餐!给我们讲讲 MySQL 重启的那些事!

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号1:xmtxtt(5000人已满),微信号2:codedq(5000人已满),微信号3:xttblog(超2800)。备注:“xttblog”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » MySQL 实战第46讲,我给丁奇大神序章,grant 不生效问题