MySQL数据库表的修复方法

受损表的症状通常是对意外中断的查询,您可以看到这样的错误,例如:


tbl_name.frm锁定不能改变。


我找不到文件tbl_name.myi(errcode:# # #)。


从处理器错误# # #表(此时,错误135是一个例外)。


意外文件的结尾。


记录文件被销毁。


在这些情况下,你要修表。该表的修复是一个非常困难的工作,在许多情况下,它是很难做到的。但是,也有一些传统的思路和流程,遵循他们增加机会修改表。通常,它开始以最快的修复方法,以看看口袋里的故障是可能的。如果发现不成功,你可以逐步升级到更彻底,但速度较慢,修复方法。如果仍然难以解决,应该从备份恢复。本节详细描述了在前一章。


简易安全修复


要修复一个表,执行以下步骤:


第一种方法是使用恢复- R选项、更正表和快速选项,仅根据索引文件内容恢复。这不会触及数据文件来修复索引文件。(r表示恢复模式)


myisamchk - R Q tbl_name


isamchk·R·Q tbl_name


如果该问题仍然存在,则快速选项将被忽略,允许修复程序修改数据文件,因为这可能是一个问题:


myisamchk -r tbl_name


isamchk R tbl_name


如果前一步失败,安全恢复模式将使用旧的恢复方法处理少数情况(但更慢),传统的恢复模式不好。


myisamchk --安全恢复tbl_name


isamchk --安全恢复tbl_name


一个艰难的修复


如果索引文件的第一16k块被破坏,或包含不正确的信息,或如果索引文件丢失,你只应该到这个阶段。在这种情况下,有必要创建一个新的索引文件。按照这样的步骤如下:


包含折叠表数据库目录的位置。


数据文件在某个地方更安全。


我使用一个表描述文件来创建一个新的(空的)数据和索引文件:


MySQL db_name壳>


MySQL >删除tbl_name;


MySQL >退出


上面的语句将创建新的空表,重新生成新的数据和索引文件使用表的描述文件tbl_name.frm。


旧数据文件被复制到新创建的数据文件中。(不要将旧文件移回新文件;必须保留一个副本以防止出错)。


在修法的标准。如今myisamchk - R Q应该工作。(这不应该是一个无限循环)。


如果您有一个备份表,它就容易得多。从备份文件中,您可以恢复表的描述文件,然后检查表,可以继续使用标准的修复方法,它应该能够解决这个问题。


非常困难的修理


只有描述文件也被损坏,您应该在这个阶段到达。这不应该发生,因为在创建表时,描述文件不再更改。


从备份中恢复并返回到2阶段的描述文件,也可以恢复索引文件并返回到1阶段。对于后者,你应该开始用myisamchk - R.


如果由于某种原因,数据备份文件丢失或没有备份文件,但您还记得表的创建表语句的创建,这很好,这样我们仍然可以恢复索引文件。


包含折叠表数据库目录的位置。


数据文件在某个地方更安全。然后删除数据库目录中相应的目录。


我们调用mysql创建表来建立复杂的语句表。







将MySQL退出,将原始数据文件和索引文件返回到数据库目录,只需替换新文件即可。


然后,他返回到第2阶段,修复表。您还可以移动到数据文件中,以便保留新的描述和索引文件,然后返回到第1阶段,并继续以标准方式修复表。