首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MyISAM是否有实际丢失数据的风险?

MyISAM是否有实际丢失数据的风险?
EN

Stack Overflow用户
提问于 2017-09-06 04:21:56
回答 2查看 236关注 0票数 0

我有一系列的ofMyISAM数据库表,并且读到了一些关于它在完整性方面不如InnoDB好的地方。具体而言,这篇文章继续下去,似乎暗示你有可能丢失数据。当然,我找不到联系(典型的运气是吧?)但我确实记得外卖的意思。

是否有可能在插入过程中丢失实际行?我的假设是,这不是真的,但我会对社会人士的意见感兴趣。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-06 04:34:49

MyISAM对事务的支持为零,因此不能确保事务的完整性。它没有可以用来从崩溃中恢复的日志。简而言之,它很脆弱,而且容易发生惊人的故障,特别是当您的系统在大写过程中突然终止时。

很有可能在写过程中丢失数据。InnoDB的不同之处在于,在它完成之前,写本身实际上是不提交的,在修改过程中有一种保持数据库完整性的机制,这样如果有故障,它就可以“回滚”到以前的状态。MyISAM没有这样的机制,它任由文件系统支配,以防止其完全损坏。

我强烈建议不要在任何重要的事情上使用MyISAM,如果可以避免的话,也不要使用任何东西。这在上世纪90年代是很有用的,当时内存很高,CPU能力也很匮乏,一个典型的高端MySQL服务器可能有512 of的内存,两个200 the的处理器,以及一对9GB的RAID1配置磁盘。每一点表现都很重要。InnoDB变得更快了,日志记录的性能损失也大大减少了,特别是在SSD上。

您不会使用没有日志的文件系统,所以您也不应该使用没有日志的数据库。

票数 4
EN

Stack Overflow用户

发布于 2017-09-06 05:45:06

当MySQL在查询过程中崩溃时,可能会发生许多顽皮的事情。

  • 正在进行中的写作可能完成也可能没有完成;你不可能知道。
  • 特别是,如果它是一个正在修改多个行的更新,那么其中一些行可能会被更改,而另一些行则不会。
  • 更糟糕的是如果更新是SET x = x + 1的话。如果您重播它,则会再次碰到这些值。
  • 索引变得“腐败”。(这几乎总是可以修理的,但这是件讨厌的事。)
  • 如果涉及复制,则会增加另一条丢失写入的途径。
  • 交易操作需要特别小心与LOCK TABLE,否则借记一个帐户,然后贷记另一个,可能会损失(或捏造)资金。

如果您只存储短暂的数据(新闻报道、博客、日志、游戏游戏等),那么这些可能都不重要。如果你在存钱,重要的是时间。

MyISAM足够坚实,可以在正常情况下做正确的事情。也就是说,它不会在插入过程中“丢失行”,除非同时发生其他事情--崩溃、磁盘错误等。

如果不能检查错误,MyISAM和InnoDB都可能“丢失行”。数据截断,除以零,死锁,失去连接等,可能会直接或间接导致一些丢失的东西。

更进一步,当有人说他们是在保护他们的数据,有主人和奴隶,但把他们两个放在同一个房间,我问洪水,地震,龙卷风等。

没有什么是100%安全的,但是正确使用的InnoDB比MyISAM安全得多,以防止数据丢失和损坏。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46066734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档