相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 41.6 mb
PDF (A4)- 41.7 mb
手册页(TGZ)- 262.2 kb
手册页(邮政编码)- 372.3 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

7.6.3如何修复MyISAM表

本节的讨论描述如何使用myisamchkMyISAM表(扩展.MYI而且.MYD).

你也可以使用检查表而且修理表对帐单进行检查和修理MyISAM表。看到第13.7.3.2节,“CHECK TABLE语句”,第13.7.3.5节,“REPAIR TABLE语句”

表损坏的症状包括意外中止的查询和可观察到的错误,例如:

  • 找不到文件tbl_name.MYI(Errcode:nnn

  • 未预期的文件结束

  • 记录文件崩溃

  • 有错误nnn从表处理程序

要获取有关错误的更多信息,请运行perrornnn,在那里nnn是错误号。下面的示例演示如何使用perror找出表中显示问题的最常见错误编号的含义:

壳> perror 126 127 132 134 135 136 141 144 145 MySQL错误代码126 =索引文件是坠毁MySQL错误代码127 =记录文件是坠毁MySQL错误代码132 =老MySQL数据库文件错误代码134 =记录已经删除(或记录文件坠毁)MySQL错误代码135 =没有更多的空间在记录文件MySQL错误代码136 =没有更多的空间索引文件MySQL错误代码141 =复制唯一键或限制编写或更新MySQL错误代码144 =表最后修复失败坠毁MySQL错误码145 =表被标记为崩溃,应该修复

注意,错误135(记录文件中没有更多的空间)和错误136(索引文件中没有更多的空间)都不是可以通过简单修复修复的错误。在这种情况下,您必须使用ALTER TABLE增加MAX_ROWS而且AVG_ROW_LENGTH表选项值:

ALTER TABLEtbl_nameMAX_ROWS =xxxAVG_ROW_LENGTH =

如果不知道当前表选项值,请使用显示创建表

对于其他错误,必须修复表。myisamchk通常可以检测和修复发生的大多数问题。

修复过程包括三个阶段,在这里描述。在开始之前,应该将位置更改为数据库目录,并检查表文件的权限。在Unix上,确保用户可读mysqld作为(和您,因为您需要访问您正在检查的文件)运行。如果您需要修改文件,那么它们也必须是可写的。

此部分用于表检查失败的情况(如第7.6.2节,“如何检查MyISAM表的错误”),或者您想使用扩展功能myisamchk提供了。

myisamchk用于表维护的选项在章节4.6.4,“myisamchk - MyISAM表维护工具”myisamchk还有一些变量,您可以设置它们来控制可能提高性能的内存分配。看到第4.6.4.6节,“myisamchk内存使用情况”

如果要从命令行修复表,必须首先停止mysqld服务器。当你这样做的时候请注意mysqladmin关闭在远程服务器上,mysqld之后服务器仍可用一段时间mysqladmin返回,直到所有语句处理停止并将所有索引更改刷新到磁盘。

第1阶段:检查您的表

运行myisamchk *。MYImyisamchk - e *。MYI如果你有更多的时间。使用- s(静音)选项,抑制不必要的信息。

如果mysqld服务器已停止,您应该使用——update-state选项告诉myisamchk把表标为检查。

你只需要修理那些表myisamchk宣布一个错误。对于这样的表,请进入第2阶段。

如果在检查(例如内存不足错误),或者如果myisamchk崩溃,转到第3阶段。

第二阶段:容易安全维修

首先,尝试myisamchk - r - qtbl_name- r - q意味着快速恢复模式).这将尝试修复索引文件而不触及数据文件。如果数据文件包含了它应该包含的所有内容,并且删除链接指向数据文件中的正确位置,那么这应该可以工作,并且表是固定的。开始修理下一张桌子。否则,请执行以下步骤:

  1. 在继续之前,对数据文件进行备份。

  2. 使用myisamchk - rtbl_name- r意味着恢复模式).这将从数据文件中删除不正确的行和已删除的行,并重构索引文件。

  3. 如果上述步骤失败,请使用myisamchk——safe-recovertbl_name.安全恢复模式使用一种旧的恢复方法,可以处理常规恢复模式无法处理(但速度较慢)的一些情况。

请注意

的值,如果您希望修复操作更快地进行,则应该设置sort_buffer_size而且key_buffer_size每个变量在运行时占用可用内存的25%左右myisamchk

如果在修复时出现意外错误(例如内存不足错误),或者如果myisamchk崩溃,转到第3阶段。

第三阶段:修复困难

只有当索引文件中的第一个16KB块被销毁或包含不正确的信息,或者索引文件丢失时,才应该达到这个阶段。在这种情况下,有必要创建一个新的索引文件。请按以下方法进行:

  1. 将数据文件移到安全的地方。

  2. 使用表描述文件创建新的(空)数据和索引文件:

    壳> mysqldb_name
    mysql >设置自动提交= 1;mysql >截断表tbl_name;mysql >退出
  3. 将旧的数据文件复制回新创建的数据文件。(不要只是将旧文件移回到新文件中。你需要保留一份副本,以防出现问题。)

重要的

如果您正在使用复制,您应该在执行上述过程之前停止它,因为它涉及到文件系统操作,而这些操作不会被MySQL记录。

回到第二阶段。myisamchk - r - q应该工作。(这不应该是一个无休止的循环。)

你也可以使用修理表tbl_nameUSE_FRMSQL语句,自动执行整个过程。实用程序和服务器之间也不可能发生不必要的交互,因为当您使用时,服务器会完成所有的工作修理表.看到第13.7.3.5节,“REPAIR TABLE语句”