2010-11-15 205 views
1

我一直有数据库重复崩溃表的问题。幸运的是,通过修复坠毁的桌子很容易修复,但不得不注意桌子崩溃(或让客户告诉我)并修复它。对客户端通过CMS访问的数据库进行更改后,崩溃倾向于发生。防止mysql MyISAM表崩溃

我注意到最近一次表崩溃,它引用了一个数字 - 就像找到57中的89;然后我在基数中注意到了主键。把2和2放在一起我搜索基数,发现优化表格在某种程度上是相关的,因此我认为通过定期优化表格,就像更新之后一样,这将有助于防止崩溃。这是真的还是我设法得到73而不是4?

当客户端通过PHP进行更改时,我可以将MYSQL函数发送到数据库,所以从这个角度来看的帮助会很好。

任何其他与表崩溃的帮助将不胜感激。

+1

InnoDB表不会崩溃(或更确切地说,它们在服务器启动时会自动恢复)。你确定这些不是MyISAM? – Mchl 2010-11-15 13:50:12

+0

哎呦,你说得对。当我写这个时,我正在看一个完全不同的数据库,因此检查了错误的数据库,哑巴移动。 – andyface 2010-11-15 13:57:06

回答

0

是不是真正的OPTIMIZE TABLE会防止表崩溃

其实

ü应该不运行OPTIMIZE TABLE过于频繁,虽然被设计为紧凑(表被锁定)无数据

尝试mysqlcheck -C

mysqlcheck -c

+0

感谢有关优化的信息。我没有提到我主要是通过PHP来运行,所以我正在寻找一个解决方案,以便在客户端进行更改时实现自动化。 – andyface 2010-11-15 14:16:25

+0

@安迪评分:可以使用纯MySQL的句法 - > http://dev.mysql.com/doc/refman/5.1/en/check-table.html – ajreal 2010-11-15 14:19:29

+0

今天看到了客户端的服务器上:在运行OPTIMIZE' TABLE',表格崩溃......必须运行'REPAIR TABLE'才能摆脱它。当然,这是MyISAM,我鼓励客户使用InnoDB,正如@Mchl提出的那样(而且正如我在自己的服务器上那样)。 – Yvan 2014-01-06 07:55:40

0

MyISAM表通常被损坏,原因如下:

  • 在MySQL或外部问题的bug(OS崩溃,硬盘掉电,出内存不足OS杀死),导致mysqld的异常退出
  • 在MyISAM存储引擎
  • 运行两个A的bug在同一时间对同一数据的mysqld的情况下
  • 硬件故障

所以,你可以做,以避免腐败的最好是有一个良好的UPS,操作系统和MySQL的运行最稳定的版本,请确保您的硬件功能正常,请确保您有足够的金额的RAM(为了避免杀死OOM,并且为了避免诱惑魔鬼,通常会在内存不足的情况下触发错误),并成为一个好孩子 - 不要用信号9杀死mysqld,并且在重新启动时确保mysqld的旧实例在开始新实例之前已经关闭。

您可能还想采取措施应对腐败。经常备份数据,并保持表格合理,以避免冗长的恢复时间。

使用InnoDB是今天流行的另一种选择,因为它与学校教授的数据库理论相一致,但它确实存在自己的问题,如果尝试迁移,可能会引入新问题 - 数据膨胀,性能下降,死锁,数据损坏(InnoDB风格),更复杂 - 更可能发生错误,更难以排除故障等。