Mysql权限导致实例无法看到

起因:那天同事杰少为了linux下的pdf2html转化装了一个字体,然后重启了主机,结果就导致mysql进控制台后 show databases只能看到
+---------------------------+
| database |
+---------------------------+
| information_schema |
| test |
+---------------------------+
由于当天晚上是要发版本的,如果实例没了,晚上就不用下班了,这个mysql里放了两个子系统的实例,要是真的missing了,就得准备全量脚本了.......

当时我的心情是这样的

Paste_Image.png
  • 分析原因
    鉴于对应的环境依然能正常使用,初步判断实例数据仍然还在,只是看不到,由于当前是使用root登录的控制台,所以有可能是重启主机导致了mysql的root用户权限错乱.

  • 解决方法
    第一步:

  //关闭mysql
  service mysql stop;  
  //进入mysql安全模式
  mysqld_safe --skip-grant-tables;

第二步: 另开一个ssh连接进入mysql

[root@localhost ~]#mysql
Welcome to the MySQL monitor. Commands end with ; 
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> show databases;
//此时你是可以看到所有的实例的
//然后修改mysql实例的user表
mysql> use mysql;
//如果已经有host为localhost的root用户记录,则想删除该记录
mysql> INSERT INTO `user` VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
mysql> flush privileges;

第三步:操作完成后关闭两个ssh连接, 重开一个ssh连接后重启mysql

service mysqld start;
  • 总结
    ** linux下很多灵异问题都是权限不够导致的,这次笔者遇到的问题就是mysql少了一个host为localhost的root用户数据**

  • PS
    还有一种情况也会导致该问题,那就是已经存在host为localhost的root用户,但是数据里所有的权限都是N而不是Y,此时按照上述步骤执行一遍用update即可

推荐阅读更多精彩内容