我有一系列MyISAM数据库表,并且正在阅读有关它在完整性方面不如InnoDB的一些要点。具体来说,帖子继续,似乎表明你可能会丢失数据。我当然找不到链接(典型的运气呃?)但是我确实记得上面提到的外卖。
在插入过程中是否可能丢失实际行?我的假设是这不是真的,但会对社区所说的内容感兴趣。
谢谢!
答案 0 :(得分:4)
MyISAM对交易没有任何支持,因此无法确保交易的完整性。它没有可用于从崩溃中恢复的日志。简而言之,它很脆弱,容易出现严重的失败,特别是如果你的系统在大写中突然终止的话。
写入过程中丢失数据的可能性非常高。 InnoDB的不同之处在于,写入本身在完成之前并未实际提交,有一种机制可以在修改期间保留数据库完整性,以便在出现故障时可以“回滚”到先前的状态。 MyISAM没有这样的机制,并且受文件系统的限制,可以将其从完全损坏中保存下来。
我强烈建议不要将MyISAM用于任何重要的事情,或者任何事情都可以避免。它在20世纪90年代非常有用,当时内存非常宝贵且CPU能力不足,典型的高端 MySQL服务器可能拥有512MB内存,两个200MHz处理器和一对9GB磁盘RAID1配置。每一点点的表现都算在内。 InnoDB的速度要快得多,日记本的性能损失也大大缩小,特别是在SSD上。
如果没有日志,你就不会使用文件系统,所以你真的不应该使用没有日志的数据库。
答案 1 :(得分:0)
当MySQL在查询过程中崩溃时,很多顽皮的事情都会发生。
SET x = x + 1
。如果你重播它,价值会再次受到冲击。LOCK TABLE
,否则从一个帐户扣款,然后记入另一个帐户,可能会丢失(或制造)钱。如果您只存储瞬态数据(新闻报道,博客,日志,游戏等),那么这些都不重要。如果你要存钱,那就太重要了。
MyISAM足以在正常情况下做正确的事情 。也就是说,它不会失去行和#34;在插入过程中,除非同时发生其他事情 - 崩溃,磁盘错误等。
MyISAM和InnoDB都可以“失去行”#34;如果你没有检查错误。数据截断,除以零,死锁,丢失连接等可能会直接或间接导致丢失的内容。
更进一步,当有人说他们通过拥有Master和Slave来保护他们的数据,但是将他们两个放在同一个房间时,我会询问洪水,地震,龙卷风等等。
没有什么是100%安全的,但正确使用的InnoDB比MyISAM更安全,可以防止数据丢失和损坏。