起因:那天同事杰少为了linux下的pdf2html转化装了一个字体,然后重启了主机,结果就导致mysql进控制台后 show databases只能看到
+---------------------------+
| database |
+---------------------------+
| information_schema |
| test |
+---------------------------+
由于当天晚上是要发版本的,如果实例没了,晚上就不用下班了,这个mysql里放了两个子系统的实例,要是真的missing了,就得准备全量脚本了.......
当时我的心情是这样的
分析原因
鉴于对应的环境依然能正常使用,初步判断实例数据仍然还在,只是看不到,由于当前是使用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即可