4

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

最近另一个开发者发现test数据库上的表都是MyISAM表。我检查了我的文件,它仍然为所有内容显示“Engine = InnoDB”。我检查了我的开发数据库,​​那里的表是 Engine=InnoDB 。

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

我希望我只是犯了复制和粘贴或其他愚蠢的错误。但是所有的测试表都是 MyISAM似乎很奇怪......当然我不能与我的错误保持一致。所有备份和恢复都使用 mysqldump 完成。

有没有不小心更换引擎的方法?

4

1 回答 1

4

我认为这是另一个广为人知的 MySQL 陷阱的例子。我自己也遇到过几次这个问题。

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

CREATE TABLE (...) ENGINE=InnoDB;

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

您可以运行SHOW ENGINES以查看哪些引擎处于活动状态。有关更多详细信息,请参阅此 MySQL 错误报告

于 2009-11-26T06:48:08.957 回答