3

这应该很容易......我有一个包含大约 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 表?

4

1 回答 1

1

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

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

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

我通常不喜欢这种戏剧性的解决方案,因为它们给人的感觉是缺少工具(或知识)。在这种情况下,我找不到确认或确认虚假表的方法,或者有选择地删除这些表的方法。

无论如何,也许这对某人有帮助。

于 2013-07-06T14:18:33.680 回答