防止mysql MyISAM表崩溃

时间:2010-11-15 13:45:23

标签: php mysql crash myisam

我一直遇到数据库反复崩溃的问题。幸运的是,通过修复崩溃的表来修复很容易,但是必须要注意表崩溃(或让客户告诉我)然后修复它是不好的做法。在客户端通过CMS访问的数据库发生更改后,往往会发生崩溃。

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

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

对于桌面崩溃的任何其他帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

不是真的优化表会阻止表崩溃

实际上,你不应该经常运行优化表(表被锁定)虽然是为了压缩免费数据而设计的

尝试mysqlcheck -C

mysqlcheck -c

答案 1 :(得分:0)

MyISAM表通常会因以下原因而损坏:

  • MySQL中的错误或外部问题(操作系统崩溃,硬关机,内存不足操作系统死机)导致mysqld异常退出
  • MyISAM存储引擎中的错误
  • 同时在同一数据上运行两个mysqld实例
  • 硬件故障

所以你可以做的最好的事情就是要有一个好的UPS,运行最稳定版本的操作系统和MySQL,确保你的硬件运行正常,确保你有足够的RAM(以避免OOM被杀,并且为了避免诱惑魔鬼一般来说,bug经常在内存不足的情况下被击中),并且是一个好孩子 - 不要用信号9杀死mysqld,并且当重新启动时确保mysqld的旧实例之前已经关闭你开始新的。

您可能还想采取措施来处理腐败问题。经常备份您的数据,并保持表格相当小,以避免冗长的恢复时间。

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