问题分析:
1.是频繁查询和更新表造成的索引错误,因为页面没有静态生成,而是动态页面。
2.是MYSQL数据库因为某种原因而受到了损坏。
(如:数据库服务器突发性的断电、在数据库表提供服务时对表进行某种操作都有可能导致数据库表被损坏而无法读取数据,还有就是因为某些不可测的问题造成表的损坏。)
解决方法:(注:修复数据库前一定要备份数据!)
在修复表的时候,最好先作一下备份(此时一般用mysqldump已经无法备份了,把整个data目录复制出来吧),所以你需要两倍于原始表大小的硬盘空间。请确保在进行修复前你的硬盘空间还没有用完。
1.用 myisamchk 修复
举例说明:
数据库名:test
表名:test_member
myisamchk 工具路径:E:\wamp\bin\mysql\mysql5.1.36\bin\myisamchk.exe
开始 -> 运行 输入 cmd。
进入 myisamchk 工具修复,具体步骤如图。若执行后不行,请把 -c -r 改为 -c -f 强制修复。
2.使用 phpMyAdmin 修复
选择要修复的表,之后在下拉框里选择修复表。
3.用”repair table”方式修复
语法:repair table 表名 [选项]
选项如下:
QUICK 用在数据表还没被修改的情况下,速度最快
EXTENDED 试图去恢复每个数据行,会产生一些垃圾数据行,万般无奈的情况下用
USE_FRM 用在.MYI文件丢失或者头部受到破坏的情况下。利用.frm的定义来重建索引
多数情况下,简单得用”repair table tablename”不加选项就可以搞定问题。但是当.MYI文件丢失或者头部受到破坏时,这样的方式不管用,这时索引文件丢失或者其头部遭到了破坏,为了利用相关定义文件来修复,需要用USE_FRM选项。
4.用mysql内建命令mysqlcheck来修复
当mysql服务在运行时,也可以用mysql内建命令mysqlcheck来修复。
语法:mysqlcheck -r 数据库名 表名 -uuser -ppass
mysqlcheck -r sports_results mytable -uuser -ppass
sports_results.mytable OK
利用mysqlcheck可以一次性修复多个表。只要在数据库名后列出相应表名即可(用空格隔开)。或者数据库名后不加表名,将会修复数据库中的所有表,例如:
mysqlcheck -r sports_results mytable events -uuser -ppass
sports_results.mytable OK
sports_results.events OK
mysqlcheck -r sports_results -uuser -ppass
sports_results.mytable OK
sports_results.events OK
参考文献: