查看“如何修复MyISAM表格”的源代码
←
如何修复MyISAM表格
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
本节中的讨论描述了如何在MyISAM表格(扩展名为.MYI和.MYD)上使用myisamchk。 您也可以使用CHECK TABLE和REPAIR TABLE语句来检查和修复MyISAM表格。 损坏表格的症状包括查询意外中止以及以下可观察到的错误: *无法找到文件tbl_name.MYI(错误代码:nnn) *文件意外结束 *记录文件已崩溃 *从表处理程序处获得错误nnn 为了获取有关错误的更多信息,请运行perror nnn,其中nnn是错误编号。以下示例显示了如何使用perror查找表示表格问题的最常见错误编号的含义: $> 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运行的用户(以及您自己,因为您需要访问要检查的文件)读取。如果您需要修改文件,您还必须对其具有写入权限。 如果您要从命令行修复表格,您必须首先停止mysqld服务器。请注意,当您在远程服务器上运行mysqladmin shutdown命令时,mysqld服务器在mysqladmin返回后仍然可用一段时间,直到所有语句处理完毕并且所有索引更改都已刷新到磁盘上。 ===阶段1:检查表格=== 运行myisamchk *.MYI或myisamchk -e *.MYI(如果您有更多时间)。使用-s(静默)选项来抑制不必要的信息。 如果mysqld服务器已停止,您应该使用--update-state选项来告知myisamchk将表格标记为“checked”。 您只需要修复myisamchk报告错误的那些表格。对于这些表格,请进行第2阶段的操作。 如果在检查过程中遇到意外错误(例如内存不足错误),或者如果myisamchk崩溃,请转到第3阶段。 ===阶段2:简单安全修复=== 首先,尝试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%。 如果在修复过程中遇到意外错误(例如内存不足错误),或者如果myisamchk崩溃,请转到第3阶段。 ===阶段3:困难修复=== 只有在索引文件中的前16KB块被破坏或包含不正确信息,或者索引文件丢失时,才需要进行这一阶段的操作。在这种情况下,需要创建一个新的索引文件。按照以下步骤操作: *将数据文件移动到安全位置。 *使用表格描述文件创建新的(空的)数据和索引文件: $> mysql db_name mysql> SET autocommit=1; mysql> TRUNCATE TABLE tbl_name; mysql> quit *将旧的数据文件复制到新创建的数据文件上。(不要仅仅将旧文件移动到新文件上。您希望保留一份副本以防出现问题。) 重要提示: 如果正在使用复制,请在执行上述过程之前停止复制,因为它涉及文件系统操作,而MySQL不会对这些操作进行日志记录。 *返回第2阶段。myisamchk -r -q应该有效。(这不应该是一个无限循环。) 您还可以使用REPAIR TABLE tbl_name USE_FRM SQL语句,它会自动执行整个过程。此外,工具和服务器之间也不存在意外交互的可能性,因为在使用REPAIR TABLE时,服务器会完成所有工作。
返回至“
如何修复MyISAM表格
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
基础知识
正则表达式
Markdown
分布式
项目管理
系统集成项目管理基础知识
云原生
Docker
云原生安全
云原生词汇表
十二因素应用
Kubernetes
音频处理
音频合成
Edge-tts
CMS系统
Docsify
VuePress
Mediawiki
自动生成
Marp
CI/CD
GitLab
设计
颜色
平面设计
AI
数字人
操作系统
GNU/Linux
数据库
Mysql
工具
链入页面
相关更改
特殊页面
页面信息