繁体   English   中英

MySQL 5.6.10 InnoDB无法创建表,因为表已经存在

[英]MySQL 5.6.10 InnoDB cannot create table as table already exists

我有一个非常有趣的案例。 我的几个InnoDB表已经被破坏了。 表的.frm文件消失了,只留下了.ibd文件。

我认为没问题,我将从备份中恢复这些表,所以我删除了.frm文件并尝试创建具有相同名称的新表,但每次我得到“表已经存在”时,.ibd文件获取已创建,但.frm没有。

基本上现在我无法在给定数据库中创建具有给定名称的InnoDB表。 我唯一的解决方案是创建MyISAM表,但我仍然想知道如何解决这个问题。

以下是事件的详细日志:

  1. 尝试创建表:

CREATE TABLE employeeemployee_id varchar(20)NOT NULL,
PRIMARY KEY( employee_login_id )使用BTREE)ENGINE = InnoDB DEFAULT CHARSET = utf8 PACK_KEYS = 1 ROW_FORMAT = COMPRESSED

表已经存在

  1. 尝试删除表以显示它不存在:

DROP TABLE员工

表不存在

  1. 我手动删除了employee.ibd文件(没有employee.frm文件)

  2. 再次尝试#1并再次收到“表已存在”

我重启了MySQL,没有变化。 我重启了整个服务器,没有变化。

我不能再在此表空间中创建名为“employee”的InnoDB表。

任何想法?

有关表的信息存储在两个位置:

  1. 服务器范围的table.frm文件
  2. 存储引擎特定的InnoDB字典

这两者必须同步,但没有可靠的机制来强制实现这种一致性。 由于InnoDB字典不同步的原因。

在你的情况下,字典中有一个孤立的记录。 你需要删除它。

InnoDB没有提供任何手动修改字典记录的方法。 但你可以制作一个假的table.frm(如果innodb_file_per_table = ON然后也是table.ibd)文件,把它放到数据库目录中并删除表。

旧版本的InnoDB可能会抱怨SPACENO不匹配。 然后检查如何修复InnoDB字典

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM