mysql报错"is marked as crashed and should be repaired"的解决方法

发布时间:2019-10-31编辑:脚本学堂
到mysql 安装目录 D:\database\MySQL5.0.45-3306\MySQL Server 5.0\bin 执行命令: myisamchk -c -r ../data/mjb/cms_session.MYI(cms_session 是表名)

mysql 安装目录 D:databaseMySQL5.0.45-3306MySQL Server 5.0bin
执行命令: myisamchk -c -r ../data/mjb/cms_session.MYI(cms_session 是表名)

执行结果如下:
- recovering (with sort) MyISAM-table '../data/mjb/cms_session.MYI'
Data records: 27
- Fixing index 1
- Fixing index 2

Data records: 3

问题分析:
1、错误产生原因,有网友说是频繁查询和更新dede_archives表造成的索引错误,因为我的页面没有静态生成,而是动态页面,因此比较同意这种说法。还有说法为是mysql数据库因为某种原因而受到了损坏,如:数据库服务器突发性的断电、在提在数据库表提供服务时对表的原文件进行某种操作都有可能导致MYsql数据库表被损坏而无法读取数据。总之就是因为某些不可测的问题造成表的损坏。
问题的编号为145

2、myisamchk工具介绍(见mysql的官方手册)
可以使用myisamchk实用程序来获得有关数据库表的信息或检查、修复、优化他们。myisamchk适用MyISAM表(对应.MYI和.MYD文件的表)。

调用myisamchk的方法:
shell> myisamchk [options] tbl_name ...
options指定你想让myisamchk做什么。在后面描述它们。还可以通过调用myisamchk --help得到选项列表。
tbl_name是你想要检查或修复的数据库表。如果你不在数据库目录的某处运行myisamchk,你必须指定数据库目录的路径,因为myisamchk不知道你的数据库位于哪儿。实际上,myisamchk不在乎你正在操作的文件是否位于一个数据库目录;你可以将对应于数据库表的文件拷贝到别处并且在那里执行恢复操作。

如果你愿意,可以用myisamchk命令行命名几个表。还可以通过命名索引文件(用“ .MYI”后缀)来指定一个表。它允许你通过使用模式“*.MYI”指定在一个目录所有的表。例如,如果你在数据库目录,可以这样在目录下检查所有的MyISAM表:
shell> myisamchk *.MYI