MySQL用于存储数据的文件格式已经过广泛测试,但是在某些情况下,可能会导致数据库表损坏。下面的讨论描述了这种情况如何发生以及如何处理。
MyISAM表损坏
即使MyISAM表格式非常可靠(SQL语句对表所做的所有更改都在语句返回之前进行了写操作),但是如果发生以下任何事件,您仍然会损坏表:
1、mysqld的进程在写中间被杀害。
2、发生计算机意外关机(例如,计算机已关闭)。
3、硬件故障。
4、您正在使用外部程序(例如 myisamchk)来修改服务器正在同时修改的表。
5、MySQL或MyISAM 代码中的软件错误。
损坏的表的典型症状是:
从表中选择数据时,出现以下错误:
Incorrect key file for table: '...'. Try to repair it
查询找不到表中的行或返回不完整的结果。
您可以MyISAM使用该CHECK TABLE语句检查表的运行状况,并使用修复损坏的MyISAM表 REPAIR TABLE。当 mysqld未运行时,您也可以使用myisamchk命令检查或修复表。
如果表经常损坏,则应尝试确定为什么会发生这种情况。要知道的最重要的事情是表是否由于服务器崩溃而损坏。您可以通过restarted mysqld在错误日志中查找最近的消息来轻松验证这一点 。如果出现这样的消息,则表损坏很可能是服务器死机的结果。否则,可能会在正常操作期间发生损坏。这是一个错误。您应该尝试创建一个可再现的测试用例来演示该问题。