MySQL - ERROR 1146 (42S02): Table 'mysql.user' doesn't exist

    我们在测试服务的时候,重启的时候,失败了报了一个“Table 'mysql.user' doesn't exist”错误,这个用户表是之前已经创建好的呀,而且这个不是保存整个数据库用户及权限的数据的吗,怎么会不存在了?

    数据库登录还是正常的,说明用户还是存在可用的,但是进去之后执行查询语句

    SELECT * FROM mysql.user;

    ERROR 1146 (42S02): Table 'mysql.user' doesn't exist

    搞事情啊!!!

    原来启动的服务也是好的,查看集群状态时,发现已经不太正常了,集群中的3台Mqsql的user表都没有了,而且只剩下Master节点独自在工作,其他两台虽然也是RUNNING状态,但是已经脱离集群独立工作了,太奇怪了。。。

    在网上找了一圈,有一些好的办法可以尝试尝试;

    1停止服务
    2数据目录下的mysql文件夹 改名
    3执行mysql_install_db重新生成授权表
    4启动服务

    既然Master不能动,就只好先拿slave来试试了,执行 mysql_install_db 

    user表是生成了,但是跟刚装的时候一样,什么数据也没有,登录密码都要重新配置了,这样要是加入集群的话,肯定也是有问题的;

    只好请教精通数据库的同事,在同事的建议下,从别的地方COPY一张user表,然后按照各个现有的服务重新将用户信息加入到数据库user表中(幸好这个集群中的服务大多数是测试的应用)。待重新加入到集群后,就恢复正常了。。。

    同时,还有一个现象是,虽然COPY过来的表里没有服务的用户数据,当我重启服务,执行重新创建用户创建表的操作时,告诉我该用户已存在了???只好先DROP USER 'username '@' %' ;然后flush  privileges ;刷新权限操作;再重新创建该用户,这样是没问题的。难道MySQL有一个缓存的地方会保存这些信息吗???

    但是mysql.user这张表为什么消失了呢?通过MySQL的日志也没有看到有drop table的操作啊,太奇怪了。。。只能先恢复服务,问题先记录 后面再慢慢查了。。。

posted @ 2022-01-27 18:35  zhangdaopin  阅读(142)  评论(0编辑  收藏  举报