MySQL MyISAM数据丢失的可能性?

时间:2011-05-27 23:20:24

标签: mysql myisam data-loss

许多网站和脚本仍然使用MySQL而不是PostgreSQL。我有几个低优先级的博客,所以我不想迁移到另一个数据库,所以我使用MySQL。

这是问题,他们在低内存VPS 上。这意味着我无法启用InnoDB,因为它只使用大约80MB的内存来加载。所以我不得不冒险运行MyISAM。

考虑到这一点,我在使用MyISAM时会看到什么样的数据丢失?如果因某人正在保存博客文章而导致电量中断,我会丢失该帖子,或者整个数据库?

在这些低端盒子上,只要整个数据库没有丢失,我就可以丢失一些最近的评论或博客文章。

6 个答案:

答案 0 :(得分:5)

MyISAM不符合ACID,因此缺乏耐用性。这实际上取决于利用InnoDB或停机时间的成本......内存。 MyISAM当然是一个可行的选择,但您的应用程序需要从数据库层获得什么?使用MyISAM会因为它的限制而使生活变得更加困难,但在某些情况下,MyISAM会很好。仅使用逻辑mysqldump备份会因其锁定性质而中断您的服务。如果您正在使用二进制日志记录,您可以将它们备份以提供可以重播的增量备份,以便在MyISAM表中的某些内容损坏时帮助恢复。

答案 1 :(得分:2)

您可能会发现以下关于MySQL Performance的文章:

  

对我而言,它不仅仅是表锁。表锁只是您在生产中使用它时需要考虑的MyISAM限制之一。特别是如果你来自“传统”数据库,你很可能会被MyISAM行为(以及由此导致的默认MySQL行为)所震撼 - 它会被不正确的关闭破坏,如果某些错误是发现等...

http://www.mysqlperformanceblog.com/2006/06/17/using-myisam-in-production/

答案 2 :(得分:0)

MySQL manual points可以破坏您的表格的事件类型,并且有一篇文章解释了如何使用myisamchk to repair tables。您甚至可以发出查询来修复它。

REPAIR TABLE table;

但是,没有关于某些类型的崩溃是否“无法修复”的信息。即使我正在进行备份,这也是我无法允许的数据丢失类型。

答案 3 :(得分:0)

如果服务器崩溃,您的自动增量主键可能会损坏,因此您的博客帖子ID可以从122,123,75912371234,75912371235跳转(服务器在123之后崩溃)。我已经看到它发生了,它并不漂亮。

答案 4 :(得分:0)

您可以始终在与数据库相关的同一VLAN上获取另一台主机作为备份,这样可以大大降低风险。我相信你唯一的其他选择是:

  1. 为您的服务器获取更多内存或杀死某些服务
  2. 查看您的主机是否在您可以使用的VLAN上共享任何类型的数据库托管,只需支付少量费用。
  3. 定期备份并做好最坏的准备。

答案 5 :(得分:-4)

根据我的拙见,MyISAM没有任何数据丢失。

断电导致数据丢失的风险是由于停电造成的,而不是数据库存储机制造成的。