MySQL MyISAM数据丢失的可能性?

MySQL MyISAM数据丢失的可能性?,mysql,myisam,data-loss,Mysql,Myisam,Data Loss,许多站点和脚本仍然使用MySQL而不是PostgreSQL。我有几个低优先级的博客,所以我不想迁移到另一个数据库,所以我使用MySQL 问题是,它们的VPS内存不足。这意味着我无法启用InnoDB,因为它只需加载大约80MB的内存。所以我不得不冒险经营MyISAM 考虑到这一点,我在使用MyISAM时会看到什么样的数据丢失?如果有人在保存博客文章时停电,我会丢失那篇文章还是整个数据库 在这些低端盒子上,只要整个数据库没有丢失,我就可以丢失一些最近的评论或博客文章。我的拙见是,MyISAM没有任何

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

问题是,它们的VPS内存不足。这意味着我无法启用InnoDB,因为它只需加载大约80MB的内存。所以我不得不冒险经营MyISAM

考虑到这一点,我在使用MyISAM时会看到什么样的数据丢失?如果有人在保存博客文章时停电,我会丢失那篇文章还是整个数据库


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

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

断电导致数据丢失的风险是由断电引起的,而不是数据库存储机制。

文章列出了可能损坏表的事件类型,并介绍了如何使用。您甚至可以发出查询来修复它

REPAIR TABLE table;

但是,没有关于某些类型的崩溃是否“不可修复”的信息。这是我在备份时也不能允许的数据丢失类型。

如果服务器崩溃,您的自动增量主键可能会损坏,因此您的博客帖子ID可以从122、123、75912371234、75912371235(服务器在123之后崩溃)跳转。我见过这种情况发生,但并不好看。

您可能会发现以下MySQL性能文章:

对我来说,这不仅仅是关于桌子锁。表锁只是MysAm限制之一,您需要考虑在生产中使用它。特别是如果您是从“传统”数据库提交的,您可能会对MyISAM行为(以及由此产生的默认MySQL行为)感到震惊——它将因未经保护的关闭而损坏,如果发现某些错误,它将因部分语句执行而失败,等等


MyISAM不耐酸,因此缺乏耐用性。这真的取决于使用InnoDB或停机时间需要更多的内存。MyISAM当然是一个可行的选择,但是您的应用程序需要数据库层做什么?由于MyISAM的局限性,使用MyISAM可能会让生活变得更艰难,但在某些情况下,MyISAM也可以。仅使用逻辑mysqldump备份将由于其锁定性质而中断您的服务。如果您使用的是二进制日志记录,则可以备份这些日志以提供增量备份,如果MyISAM表中出现损坏,可以重放这些备份以帮助恢复。

您可以在同一VLAN上找到另一台主机作为备份从属于您的数据库,这将大大降低风险。我相信您唯一的其他选择是:

  • 为您的服务器获取更多的RAM或终止某些服务
  • 查看您的主机是否在VLAN上有任何类型的共享数据库托管,您可以使用该VLAN,只需支付少量费用
  • 定期备份,做好最坏的准备

  • 我假设MyISAM info表、头或行可能会发生一些重要的写入操作,从而使该文件处于无效状态。MyISAM是怎么处理的?嗯,对不起,我真的不知道。我觉得MySQL/MyISAM是可靠的,但我忽略了实现的这个细节级别。我会查看MySQL文档。。。或者甚至是源代码。这只适用于忽略不丢失数据的后端的存在的情况。是的,造成数据丢失的直接原因是断电,但如果说MyISAM可能会导致数据丢失,那么这一点也不错,因为可以编写一个后端来保留数据,而您忽略了MyISAM还有其他问题。VPS给您的内存有多少?你可能想考虑和另一个主持人一起去。Dreamhost有600 MB VP,每月30美元。他们说这足以成为100强博客。如果30美元太多了,可能你的数据没有那么值钱,你应该设置一个脚本,通过MySQL dump进行每日(或更频繁)备份。谢谢,但我不愿意每月只为600MB支付30美元。此外,如果我能找到让MyISAM正常工作的方法,就没有理由增加我的RAM。“隐藏的损坏。如果可能是坏内存操作系统或MySQL错误,但损坏可能会发生,并且在MyISAM存储引擎中长期未被注意到。这种隐藏的损坏可能会在以后导致错误查询结果崩溃和进一步的数据损坏。”+1,我真的宁愿支付更多的内存,也不愿处理停机时间。如果只有一两个很少编写的表,那是一回事,但是有+10个表,我就不应该冒险。即使是SQLite也是一个更好的选择。