【问题标题】:Crash resilience of InnoDb vs. MyISAMInnoDb 与 MyISAM 的崩溃恢复能力
【发布时间】:2019-07-01 14:09:15
【问题描述】:

我们在 Windows 上运行 MySQL 服务器。有时,Windows 会崩溃,并使数据库处于损坏状态(“密钥 'PRIMARY' 的重复条目”消息,尽管密钥是自动生成的;可以使用“修复表”命令进行修复)。

我只在 MyISAM 表上看到过这个问题,在 InnoDb 表上从来没有。这是偶然发生的,还是 InnoDb 及其额外的事务代码实际上对此类故障更具弹性?

【问题讨论】:

  • “这是偶然发生的,还是 InnoDb 及其额外的事务代码实际上对此类故障更具弹性?” 是的,innoDB 更具弹性然后是 MyISAM..

标签: mysql innodb myisam


【解决方案1】:

MyISAM 不支持ACID databases 的四种品质中的任何一种。

InnoDB 专为崩溃恢复而设计。它有几个功能可以在崩溃的情况下防止此类损坏,并且还可以自动从崩溃中恢复,因此您不必运行 REPAIR TABLE。

MySQL 5.5.5 in 2010 以来,InnoDB 一直是默认存储引擎。很明显,MySQL 正在(缓慢地)朝着逐步淘汰 MyISAM 的方向发展。在 MySQL 8.0 中,甚至 mysql 模式中的系统表都已转换为 InnoDB。

现在是时候考虑一​​下 MyISAM 过时的技术并停止使用它了。我们应该尊重它在历史上的地位,但要继续寻求更好的解决方案。

【讨论】:

  • “现在是时候考虑一​​下 MyISAM 过时的技术并停止使用它了。我们应该尊重它在历史上的地位,但要继续寻求更好的解决方案。” 好@@ 987654323@ 用于查询处理(如果需要)我宁愿拥有 MyISAM 存储引擎 .. 我仍然需要在 MySQL 8 上对这一点进行一些基准测试,但我感觉 MyISAM 的速度(快得多)在那里我可能错了,因为我相信 MySQL 8.0 有新的存储引擎。 (我相信类似 TempTable)
  • "Beginning with MySQL 8.0.16, the storage engine used for on-disk internal temporary tables is always InnoDB." TempTable 存储引擎只能用于内存中的临时表,替代方案是 MEMORY 存储引擎。似乎 MyISAM 不再是临时表的选项。
  • 确实感谢我之前并没有真正看过它,但是 " 在 MySQL 8.0.16 及更高版本中,磁盘内部临时表始终使用 InnoDB 存储引擎;从 MySQL 8.0 开始。 16,这个变量已被删除,因此不再受支持。“ source 所以它几乎删除了基准测试选项......
  • 同意的法案!我最近故意使用 MyISAM 的一次是用于记录表,我希望条目即使在回滚后也能保持不变。非事务性行为是可取的。
猜你喜欢
  • 2014-04-07
  • 2015-05-23
  • 2011-05-14
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 2010-11-12
  • 1970-01-01
相关资源
最近更新 更多