意外的MySQL表引擎发生了变化?

时间:2009-11-26 06:37:46

标签: mysql innodb myisam

我一直在通过复制和放大器向MySQL数据库添加表格。从文件粘贴到mysql命令行应用程序。我的过程是从文件中复制CREATE TABLE语句并将其粘贴到我的开发数据库中,然后将其粘贴到另一台机器上的测试数据库中。我是唯一一个使用测试数据库的人。我的CREATE TABLE语句指定Engine = InnoDB。测试数据库启用了InnoDB。

最近,另一位开发人员发现测试数据库上的表都是MyISAM表。我检查了我的文件,它仍然为所有内容说“Engine = InnoDB”。我检查了我的开发数据库,​​表格是Engine = InnoDB那里。

为了证明测试数据库对InnoDB没有问题,我只需要ALTER TABLEd将引擎设置为所有表上的InnoDB。

我希望我刚刚制作了副本&粘贴或其他愚蠢的错误。但是,所有测试表都是MyISAM似乎很奇怪......当然,我不能与我的错误保持一致。所有备份&恢复已经完成了mysqldump。

有没有办法无意中改变引擎?

1 个答案:

答案 0 :(得分:4)

我认为这是众所周知的MySQL陷阱的另一个例子;我自己曾经多次遇到这个问题。

基本上问题是,如果InnoDB引擎由于某种原因(通常是配置问题)无法启动 - 那么MySQL会默默地回退到MyISAM引擎。即使你的陈述说:

CREATE TABLE (...) ENGINE=InnoDB;

然后,如果InnoDB没有激活,MySQL将很乐意创建一个MyISAM表,甚至不会警告你。即使您稍后发现并修复了InnoDB问题,在问题期间创建的所有表仍然是MyISAM。再见数据完整性! :)

您可以运行SHOW ENGINES以查看哪些引擎处于活动状态。有关详细信息,请参阅this MySQL bug report

相关问题