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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券