重启MySQL服务后,导致数据表不存在的问题记录

最近发现了个问题,如标题。

具体操作说不清了,但大概是这样的
我使用MySQL Workbench来进行数据模型的同步,然后在修改一些原有表的设计的时候,Workbench把我的表外键给删掉了,我也没有在意,就同步了数据库。
然后在MySQL服务重启之后就出现了这种状况,如果你也是这种状况, can't select from existing table because it doesn't exist ,那么八成是我这里描述的问题。


问题解决
1.打开MySQL的errorLog,具体就在MySQL的安装目录下的my.cnf文件里,添加err-log的生成路径,然后查看错误日志。

2.发现错误日志在查询表的时候,出现如下内容
InnoDB: Load table 'mydb/test1' failed, the table has missing foreign key indexes.
也就是无法加载我这个表,不是表丢了,而是无法加载,我这个表找不到对应的外键索引。

后经Google,说者可能是MySQL的一个bug,就是删除了在外键列上的索引导致的,MySQL官方描述的这俩问题
https://bugs.mysql.com/bug.php?id=68148
https://bugs.mysql.com/bug.php?id=74659

3.遇到这个问题的解决办法,就是先将检测外键的功能给关掉
SET FOREIGN_KEY_CHECKS=0;
然后可以通过create index来把索引补回来。
然后再把检测外键的开关打开
SET FOREIGN_KEY_CHECKS=1;

4.补充一下,我遇到的这个问题和上面描述还有一点不太一样,就是我的外键索引是存在的,但是名字居然和我的外键名字完全相同,估计是通过workbench同步的时候生成代码出错导致的,也出现同样的问题,我就讲原来的索引干掉,重新创建了一下之后,问题解决了。

猜你喜欢

转载自liyunpeng.iteye.com/blog/2279842
今日推荐