mysql8修复_mysql8 参考手册--如何修复MyISAM表

本节中的讨论描述了如何在表(扩展名和 )上使用 myisamchk。 MyISAM.MYI.MYD

您也可以使用CHECK TABLE and REPAIR TABLE语句检查和修复MyISAM表。请参见 第13.7.3.2节“ CHECK TABLE语句”和 第13.7.3.5节“ REPAIR TABLE语句”。

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

找不到文件 tbl_name.MYI (ERRCODE: nnn)

文件意外结束

记录文件已崩溃

nnn表处理程序 出现错误

要获取有关错误的更多信息,请运行 perror nnn,其中 nnn错误号为。下面的示例演示如何使用perror查找最常见的错误编号的含义,这些错误编号指示表存在问题:

shell> perror 126 127 132 134 135 136 141 144 145

MySQL error code 126 = Index file is crashed

MySQL error code 127 = Record-file is crashed

MySQL error code 132 = Old database file

MySQL error code 134 = Record was already deleted (or record file crashed)

MySQL error code 135 = No more room in record file

MySQL error code 136 = No more room in index file

MySQL error code 141 = Duplicate unique key or constraint on write or update

MySQL error code 144 = Table is crashed and last repair failed

MySQL error code 145 = Table was marked as crashed and should be repaired

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

ALTER TABLE tbl_name MAX_ROWS=xxx AVG_ROW_LENGTH=yyy;

如果您不知道当前表选项的值,请使用 SHOW CREATE TABLE。

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

维修过程包括以下三个阶段。在开始之前,您应该将位置更改为数据库目录并检查表文件的权限。在Unix上,请确保mysqld的运行用户(以及您自己,因为您需要访问要检查的文件)可以读取它们 。如果事实证明您需要修改文件,那么它们也必须是可写的。

本节适用于表检查失败的情况(例如第7.6.2节“如何检查MyISAM表中的错误”中所述),或者您要使用myisamchk 提供的扩展功能。

第4.6.4节“ myisamchk -MyISAM表维护实用程序”中介绍了用于表维护 的myisamchk选项。 myisamchk还具有一些变量,您可以设置这些变量来控制内存分配,以提高性能。请参见 第4.6.4.6节“ myisamchk内存使用情况”。

如果要从命令行修复表,则必须首先停止mysqld服务器。请注意,当您在远程服务器上执行mysqladmin shutdown时,在mysqladmin返回之后,mysqld服务器仍然可以使用一段时间,直到所有语句处理停止并且所有索引更改都已刷新到磁盘上为止。

阶段1:检查表格

如果有更多时间,请 运行myisamchk .MYI或myisamchk -e .MYI。使用 -s(静默)选项可消除不必要的信息。

如果mysqld服务器已停止,则应使用该--update-state选项告诉myisamchk将表标记为 “已选中”。”

您只需要修复 myisamchk宣布错误的表。对于此类表,请转到阶段2。

如果在检查时遇到意外错误(例如out of memory错误),或者myisamchk 崩溃,请转到阶段3。

第二阶段:轻松安全维修

首先,尝试myisamchk -r -q tbl_name(-r -q表示“ 快速恢复模式 ”)。这将尝试修复索引文件而不接触数据文件。如果数据文件包含应有的所有内容,并且删除链接指向数据文件内的正确位置,则此操作应该起作用,并且表已修复。开始修复下表。否则,请使用以下过程:

在继续之前,请备份数据文件。

使用myisamchk -r tbl_name (-r表示“ 恢复模式 ”)。这将从数据文件中删除不正确的行和已删除的行,并重建索引文件。

如果前面的步骤失败,请使用myisamchk --safe-recover tbl_name。安全恢复模式使用一种旧的恢复方法,该方法可以处理一些常规恢复模式无法解决的问题(但速度较慢)。

注意

如果希望修复操作快得多,则在运行myisamchk时,应将sort_buffer_size和 key_buffer_size变量的值分别设置为 可用内存的25%左右 。

如果在修复时遇到意外错误(例如 out of memory错误),或者 myisamchk崩溃,请转到阶段3。

阶段3:难以维修

仅当索引文件中的第一个16KB块被破坏或包含不正确的信息,或者缺少索引文件时,才应进入此阶段。在这种情况下,有必要创建一个新的索引文件。这样做如下:

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

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

shell>mysql db_name

mysql>SET autocommit=1;

mysql>TRUNCATE TABLE tbl_name;

mysql>quit

将旧数据文件复制回新创建的数据文件。(不要只是将旧文件移回新文件。您要保留副本,以防出现问题。)

重要

如果使用的是复制,则应在执行上述过程之前将其停止,因为它涉及文件系统操作,并且这些操作不会由MySQL记录。

返回到阶段2。myisamchk -r -q应该可以工作。(这不应是一个无限循环。)

您还可以使用SQL语句,该语句自动执行整个过程。实用程序和服务器之间也不会发生不必要的交互,因为使用时服务器会完成所有工作。请参见 第13.7.3.5节“ REPAIR TABLE语句”。 REPAIR TABLE tbl_name USE_FRMREPAIR TABLE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值