mysql - 意外的 MySQL 表引擎更改?

标签 mysql innodb myisam

我一直在通过从文件复制粘贴到 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/

相关文章:

mysql - 将 MySQL 工作台连接到 Amazon RDS 实例

MySQL Order by bool 值 tinyint

mysql - NULL 对 MySQL 表有什么影响? (InnoDB)

mysql 数据库 innodb myisam 性能

mysql - AWS RDS aurora Mysql 5.6 无法创建引擎不同于默认的表

mysql 加速 500,000 行表中的查询

php - 确保日期/时间在全局范围内正确 PHP 5.3/MySQL

MySQL随机与特定选项

php - 将 mySQL 数据库输出为 XML 的简单 PHP 脚本

mysql - 数据锁定阻止查询运行 - MySQL InnoDB