innodb引擎frm文件被删除成为“孤表”的解决办法

今天发现了一个很意外的问题。。。。

090918 19:07:43  InnoDB: Error: table 'ceshi3/stest3'
InnoDB: in InnoDB data dictionary has tablespace id 6,
InnoDB: but tablespace with that id or name does not exist. Have
InnoDB: you deleted or moved .ibd files?
InnoDB: This may also be a table created with CREATE TEMPORARY TABLE
InnoDB: whose .ibd and .frm files MySQL automatically removed, but the
InnoDB: table still exists in the InnoDB internal data dictionary.
InnoDB: Please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html
InnoDB: for how to resolve the issue.

当我直接删除'ceshi3/stest3'表时提示出错。仔细观察数据目录ceshi3下,没有发现stest3.frm文件。看来只是InnoDB 内部数据字典中存在该表,在数据文件中是缺少.frm文件的,也就是常常所说的“孤表”。那怎么办呢?它解决办法就是

1. 在另外一个数据库ceshi4中创建一个与'ceshi3/stest3'结构一样的表,把ceshi4目录下的该表的stest.frm拷贝到目录ceshi3下。

2.现在你就可以进入数据库ceshi3下,删除该表stest3了,删除后可以重建。

总结:

innodb表它自己数据目录下 .frm 文件中保存它自己数据字典信息,然而 InnoDB 将它自己信息保存在数据文件中 ,InnoDB 自己数据字典中如果你在外部移走了.frm 文件或在那么.frm 文件可能会因和 InnoDB 内部数据字典 out-of-sync 而结束。

你可能感兴趣的:(mysql)