【问题标题】:how to automatically repair table if crashed [closed]如果崩溃如何自动修复表[关闭]
【发布时间】:2013-07-13 09:50:37
【问题描述】:

有时如果一个表被标记为崩溃,一个简单的

REPAIR TABLE `tablename`

工作正常,可以继续。

如何在我的 PHP 脚本中添加自动修复?

我得到错误:

1194 - Table 'whos_online' is marked as crashed and should be repaired

【问题讨论】:

  • 首先了解为什么会发生这种情况并解决它不是更好吗?
  • 肯定会很有趣,因为我每年只发生一次
  • 发生这种情况时您的磁盘空间不足吗?
  • 不,有 6GB 可用空间
  • 检查 MySQL 的 error log 以获取线索。

标签: php mysql error-handling


【解决方案1】:

这不太可能有意义。

如果您需要如此频繁地修复表以致需要将其自动化,则说明您的设置有问题。在这种情况下,您需要解决根本原因。

自动化解决方案也难以实施。您必须解析 mySQL 错误消息,以确定查询失败的原因是否可能与损坏的表有关。查询失败的可能原因有数千种。

通常的方法是监控网站上发生的事情,并让管理员对问题做出反应。例如,您可以让您的网络应用在查询失败时向您发送电子邮件。

【讨论】:

  • 如果我的表只是标记为崩溃,怎么会有thousands of different possible reasons why a query could fail.
  • 如果我的“标准 debian”设置有问题,那会很有趣,但我怎么能发现呢? (每年只发生一次)
  • @rubo 足够公平 - 在这种情况下,您必须检查错误消息,查看它是否包含“标记为崩溃”并运行 REPAIR 如果您的 PHP 脚本的 mySQL 用户被允许去做。尽管如此,如果这种情况经常发生,以至于您觉得需要自动化它,那么您的服务器上就有问题了。 (编辑:啊,你提到它不经常发生)
  • 所以如果发生错误,没有mysql选项可以自动尝试修复?我的意思是:这很愚蠢 - mysql 准确地解释了要做什么,但它自己却没有这样做
  • @rubo 它可能不会自动执行此操作,以便管理员有机会查看可能有问题。崩溃总是有可能需要修复的一些原因。运行 mysqlcheck 的 cron 作业可以做你想做的事 - 我找不到任何关于告诉 mySQL 立即自动进行修复的内容。
猜你喜欢
  • 2019-10-07
  • 2018-01-18
  • 2013-07-30
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 2022-01-10
相关资源
最近更新 更多