5

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

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

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

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

4

6 回答 6

5

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

于 2011-06-02T08:55:02.453 回答
2

您可能会发现以下感兴趣的 MySQL 性能文章:

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

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

于 2011-05-31T11:47:07.550 回答
0

MySQL 手册指出了可能损坏表的事件类型,并且有一篇文章解释了如何使用myisamchk 来修复表。您甚至可以发出查询来修复它。

REPAIR TABLE table;

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

于 2011-05-30T15:31:26.587 回答
0

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

于 2011-05-30T15:34:36.393 回答
0

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

  1. 为您的服务器获取更多 RAM 或终止某些服务
  2. 查看您的主机是否在 VLAN 上拥有任何类型的共享数据库托管,您只需支付少量费用即可使用。
  3. 进行定期备份并为最坏的情况做好准备。
于 2011-06-03T07:37:29.540 回答
-4

在我看来,MyISAM 没有任何数据丢失。

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

于 2011-05-27T23:24:36.690 回答