查表的程度方面有差异。通常用标准方法就足够了。如果标准检查报告没有发现错误而您仍然怀疑有毁坏(或许因为查询没有正常地工作),可能要执行更彻底的检查。要想用任意一个实用程序执行标准的表检查,则不用带任何选项直接调用即可:
% myisamchk tbl_name
% isamchk tbl_name
为了执行扩充检查,使用--extend-check 选项。该选项非常慢,但检查极为彻底。对于该表的数据文件中的每个记录,索引文件中的每个索引的相关键都被检查以确保它真正指向正确的记录。myisamchk 还有一个中间选项- - m e d i um - c h e c k,它不如扩展检查彻底,但速度快。
如果对于--extend-check 检查不报告错误,则可以肯定表是好的。如果您仍然感觉表有问题,那原因肯定在其他地方。应重新检查任何好像有问题的查询以验证查询是正确书写的。如果您认为问题可能是MySQL服务器的原因,应考虑整理一份故障报告或升级到新的版本上。
如果myisamchk 或isamchk 报告表有错误,应用下节中的说明修复它们。
修复表
表的修复是一项可怕的工作,如果具体问题非常独特则更难进行。然而,有一些常规的指导思想和过程,可以遵循它们来增加修正表的机会。通常,开始时可以用最快的修复方法,看看是否能修正故障。如果发现不行的话,可以逐步升级到更彻底的(但更慢的)修复方法上,直到故障被修复或您不能继续升级为止(实际上,大多数问题不用更大规模的和更慢的方法就能修正)。如果表不能修复,则从备份中恢复该表。有关使用备份文件和更新日志进行恢复的指导在已第11章中给出。
1. 执行标准的表修复
为了修复一个表,执行下列步骤:
1) 试着用--recover 选项修正表,但也可以用--quick 选项试图只根据索引文件的内容进行恢复。这样将不触及数据文件:
% myisamchk --recover --quick tbl_name
% isamchk --recover --quick tbl_name
2) 如果问题仍存在,再试一下上一步的命令,但忽略--quick 选项,以允许my i s a m c h k或isamchk 前进并修改数据文件:
% myisamchk --recover tbl_name
% isamchk --recover tbl_name
3) 如果还不工作,试一试--safe-recover 修复方法。这种方法比普通的恢复方法要慢,但能够修正-recover 方法不能修正的几个问题:
% myisamchk --safe-recover tbl_name
% isamchk --safe-recover tbl_name
如果myisamchk 或isamchk 由于一个“C a n’t create new temp file: file_name” 的错误消息在任何一步中停止,应该重复这个命令并增加--force 选项以迫使清除临时文件。这个临时文件可能是从上一次失败的修复中留下的。
在修复表之前拷贝它们在执行表修复前应该遵循的一个常规的预防措施是做该表的新拷贝。这种情况未必出现,但如果发生,则可以从拷贝文件中做该表的新的拷贝并试试另一种恢复方法。
2. 标准表修复方法失败时怎么办
如果标准的修复过程未能修复表,则索引文件可能在修复时丢失或毁坏。尽管未必可能,但还是有可能使表的描述文件丢失。不论哪种情况,都需要替换受影响的文件,然后再试试标准修复过程。
为了重新生成索引文件,可以使用下列过程:
1) 定位到包含崩溃表的数据库目录中。
2) 将该表的数据文件移到安全的地方。
3) 调用mysql并通过执行下列语句重新创建新的空表,该语句使用表的描述文件tbl_name.frm 重新开始生成新的数据和索引文件:
mysql> DELETE FROM tbl_name;
4) 退出mysql,将原始的数据文件移回到数据库目录中,替换刚建立的新的空文件。

全国销售热线:
售后服务热线:(0)13949036533







