将myisam转换为innodb会在(几乎)所有表中提供“表已存在”

时间:2013-07-06 03:20:29

标签: mysql innodb myisam alter

应该很容易......我有一个大约有20个表的数据库,都在MyISAM中。我想将它们转换为InnoSB,所以我执行了:

alter table xxxx engine = InnoDB;

结果我得到了

ERROR 1050 (42S01): Table './yyy/xxx' already exists

我尝试了几张表,并认为它会发生在所有人身上,直到 我点了两张正确转换的表格。 一个SHOW TABLE STATUS确认了正确的转换。很奇怪的是 其他几个表的结构非常相似或相同,但是 没有转换。

MySQL版本是5.5.27 ...我尝试通过phpMyAdmin,直接 通过mysql命令。结果相同。

注意:我找到了下面指出的线程,这里有一些测试: - 我做了mysqlchk表 - 没关系。 - DROP TABLE建议作品,表格消失, - REPAIR TABLE然后报告它不能存档表(这是合乎逻辑的)。 - 如果我从备份中重新启动表,则会再次出现相同的错误。

是否存在并行的InnoDB表,我看不到?

1 个答案:

答案 0 :(得分:1)

公平地说,解决方案的灵感来自#takteek指示的线程中的最后一个条目。

确定问题可能是一个重复的表(MyISAM中的原始表,可能是InnoDB中的一些表,以前的实验遗留下来的),我决定使用大锤方法:

  • DROP DATABASE yyy;
  • 从备份中恢复MyISAM数据库(停止服务器,解压缩 数据库存档,重新启动服务器)。
  • 然后在每张桌子上做了ALTER TABLES xxx ENGINE InniDB

我一般不喜欢这种戏剧性的解决方案,因为他们觉得缺乏工具(或知识)。在这种情况下,我找不到确认或确认虚假表的方法,或者选择性地丢弃这些表的方法。

无论如何,这可能对某人有所帮助。