mysql重启root不能登_flush privileges引起的mysql root用户无法登录

昨晚同事急急忙忙过来说生产环境一个实例(slave)root用户进不去了,询问得知这一切都源于flush privileges

Reloadsthe privileges from thegrant tables in themysqldatabase. On Unix, this also occurs if the server receives aSIGHUPsignal.The servercaches information in memory as a result ofGRANT,CREATE USER,CREATE SERVER, andINSTALL PLUGINstatements. This memory is not released by the correspondingREVOKE,DROP USER,DROP SERVER, andUNINSTALL PLUGINstatements, so for a server that executes many instances of the statements that cause caching, there will be an increase in memory use. This cached memory can be freed withFLUSH PRIVILEGES.

第一步:先检查其他业务账号是否正常,因为root不是业务账号不对外提供服务,业务账号一切OK

第二步:开始分析,flush privileges原理如上所示,于是怀疑cache与grant tables信息不一致

第三步:因为问题实例是slave,将外部应用读访问切换到master,通过对slave两次重启将root用户密码初始化

(1)关闭实例,一机多实例、处理故障情况下要格外小心,以免错上加错

mysqladmin -uuser -ppassword shutdown  #如果有shutdown权限账号

kill pid_mysqld  #如果没有shutdown权限账号

(2)启动无需权限验证的mysqld

my.cnf中[mysqld]作用域中添加一行  skip-grant-tables

或在启动mysqld时以参数形式指定   --skip-grant-tables

mysqld --skip-grant-tables &

(3)初始化root用户密码

USE MySQL ;UPDATE user SET Password = password('new-password') WHERE User = 'root' ; flush privileges ;

(4)关闭实例

mysqladmin -uroot -ppassword shutdown

(5)正常启动mysqld

mysqld  &

至此slave的问题解决了,但是还有个潜在的风险,master上没有执行flush privileges,一旦root密码丢失要用上述两次重启来解决代价和影响很大,然后仔细询问这个实例由来,原来是用mysqldump在另一套环境中将整个实例备份后恢复到今天出问题的master和slave上的,这时候真相大白,全实例备份自然包含mysql数据库,恢复中会先drop grant table,再重建初始化数据,而两个环境的root用户密码不同且同事不清楚,所以走了很多弯路,对于运维工作来说环境不规范带来的风险和工作量是无法估量,这次故障解决是半路介入的,没有掌握全部信息,年后回来故障应急处理能力下降不少,看来还需要多些故障练手!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值