我一直在通过从文件复制粘贴到 mysql 命令行应用程序来向 MySQL 数据库添加表。我的过程是从文件中复制 CREATE TABLE 语句并将其粘贴到我的开发数据库中,然后也将其粘贴到另一台机器上的测试数据库中。我是唯一一个使用测试数据库的人。我的 CREATE TABLE 语句指定 Engine=InnoDB。测试数据库启用了 InnoDB。
最近又有开发者发现test数据库上的表都是MyISAM表。我检查了我的文件,它仍然为所有内容显示“Engine=InnoDB”。我检查了我的开发数据库,那里的表是 Engine=InnoDB。
为了证明测试数据库与 InnoDB 没有问题,我只是 ALTER TABEd 将所有表上的引擎设置为 InnoDB。
我希望我只是犯了复制粘贴或其他愚蠢的错误。但是,所有 测试表都是 MyISAM 似乎确实很奇怪……当然我不能与我的错误保持一致。所有备份和恢复都是用 mysqldump 完成的。
有没有办法无意中改变引擎?
最佳答案
我认为这是另一个广为人知的 MySQL 陷阱实例;我自己也遇到过几次这个问题。
基本上问题在于,如果 InnoDB 引擎由于某种原因(通常是配置问题)无法启动——那么 MySQL 会默默地回退到 MyISAM 引擎。即使你的声明说:
CREATE TABLE (...) ENGINE=InnoDB;
然后,如果 InnoDB 未激活,MySQL 会很高兴地创建一个 MyISAM 表,甚至不会警告您。即使您后来发现并修复了 InnoDB 问题,问题期间创建的所有表仍然是 MyISAM。告别数据完整性! :)
您可以运行 SHOW ENGINES
来查看哪些引擎处于事件状态。参见 this MySQL bug report了解更多详情。
关于mysql - 意外的 MySQL 表引擎更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1801910/