MySQL表索引被破坏的问题及
解决方案
在
工作中,我听到了DedeCMS的
网站访问问题,和全
屏幕显示错误,
检查错误
消息的MySQL日志:
表。 dnzsw04_archives'is dedecmsv4标记为坠毁,必须修复
这表明CMS的文章表dnzsw04_archives上标有问题需要修理,所以我们很快
恢复历史数据和互联网
搜索的
原因。最后,问题就解决了。
解决方法如下:
bin / myisamchk
工具发现MySQL的
安装目录中
输入命令行:
myisamchk - C - R。 / / / dnzsw04_archives.myi dedecmsv4数据
然后myisamchk工具会帮助你恢复数据表的索引。
重启MySQL和解决问题。
问题分析:
1,错误的原因。有网友说,他们
经常查询和更新的dnzsw04_archives表引起的索引错误,因为我的页面不是静态生成的,而是动态的页面,所以我同意你的观点。
据说,MySQL数据库由于某种原因被
损坏,例如数据库表提供
服务时数据库
服务器突然中断以及表上的原始
文件。
进行某种
操作会导致MySQL数据库表被破坏,无法读取数据,这是因为一些不可测量的问题导致了表的损坏。
2。解决问题的办法。
当您尝试修复一个坏表的问题时,有三种
类型的修复。如果您得到一个错误消息,不能
设置临时文件,请
删除所指出的信息,并再次删除。
尝试一次-这通常是由上次修复操作遗留下来的。
三种修复方法如下:
myisamchk --恢复--快速 / / /
路径tblname %
% myisamchk -恢复 / / / tblname路径
% myisamchk --安全恢复 / / / tblname路径
第一个是最快的,用于修复最常见的问题;最后一个是最慢的,用于修复其他方法无法修复的问题。
检查并修复MySQL
数据文件 如果上述方法不能修复损坏的表,在您放弃之前,您也可以尝试以下两种技术:
如果你怀疑表的索引文件(*.我)有一个未修复的错误或丢失的文件,你可以使用数据文件(*. MYD)和数据格式文件(*. FRM)再生。
做。首先,
复制数据文件(tblname。MYD)。重新
启动MySQL服务并将其
连接到服务,并使用下面的命令来删除该表的内容:
MySQL >删除tblname;
当表的内容删除,
创建新的索引文件。
退出登录并重新
关闭服务,然后覆盖新的(空)与数据文件中的数据(tblname。MYD)你刚刚救了。
文件。最后,kill -9用于
执行标准的修复(二以上方法)再生基于表的数据和表的格式文件内容的索引数据。
如果格式文件(tblname。FRM)你表丢失或不可修复的错误,你知道如何使用相应的创建
表生成表,你可以重新生成一个新的。你的数据文件和索引文件的文件和文件。如果索引文件中有问题,可以使用上面的方法来重建它。
一个新的一起使用。首先,复制一个数据和索引文件,然后删除原始文件(删除数据目录中表的所有记录)。
启动MySQL服务并使用原始创建
桌上的文件建立一个新表。新的.frm文件应该正常工作,但它是最好的执行标准修正(第二段)。
3、myisamchk工具
介绍(参见MySQL官方手册)
你可以用myisamchk
实用程序来获取有关数据库表、信息核对、修正、
优化。myisamchk应用MyISAM表(用于the.myi and.myd文件表)。
方法调用myisamchk:
壳> myisamchk {
选项} tbl_name…
选项指定你想要myisamchk做。在后面描述他们。你也可以通过调用myisamchk得到选项列表,帮助。
tbl_name是一个数据库表,你要检查或修复。如果你不
运行myisamchk数据库目录中的某个地方,你必须指定数据库目录的路径由于myisamchk不知道。
你的数据库在哪里事实上,myisamchk不在乎你正在
处理的文件位于一个数据库目录。您可以在其他地方复制与数据库表对应的文件。
恢复操作在那里执行。
如果你想,你可以叫几桌用myisamchk命令行。你也可以使用一个名为索引文件(使用)
。我
后缀)来指定一个表,它允许你通过使用
模式*指定目录中的所有表。myi.for的例子,如果你在数据库目录,你可以检查它的目录下
所有的MyISAM表:
壳> myisamchk *。我
如果您不在数据库目录中,您可以通过指定目录路径来检查所有的表:
壳> myisamchk / / /路径database_dir *。我
推荐的方法来快速检查所有的MyISAM表:
壳> myisamchk --沉默--快 / / /路径datadir *。我
这个命令假设你有空闲
内存大于64MB,在记忆与myisamchk
配置的
详细信息,参见5.9.5.5部分,myisamchk内存使用
当你运行myisamchk,你必须确保其他程序不使用表。否则,当你运行myisamchk,下面的错误信息将被显示:
警告:客户正在使用或没有
正确关闭表。
这表明你想检查一个程序,不关闭文件或关闭文件正确(如mysqld服务器)不关闭或终止。
如果mysqld正在运行,你必须通过冲洗
表强制排空仍在内存中的表进行
修改。当你运行myisamchk,你必须确保其他程序不使用表。为了避免这个问题,最简单的方法是使用检查
而myisamchk表检查表。