晚上在家打开博客,看看有没有朋友留言或对日志评论。不料首页打开竟是一段错误提示:mysql错误:……is marked as crashed and should be repaired!刷新几次问题依旧。
问题大了!心里一惊!重启了Mysql和IIS(用IIS跑PHP的?惭愧!),问题还是一样。看来真的数据库文件有问题了!有个备份,只不过是几天以前的。鲜甜IT.Net可是每天都有更新的!于是不怀一丝希望地问起百度老师来,却意外地有了结果。
其实Mysql的bin目录里就有许多工具程序。有什么疑难杂症,不妨去工具里翻翻,说不定问题就迎刃而解了。对于我博客此次的数据库错误,是这样解决的:在网查到这个错误提示的含义是:某表标记为坠毁并应得到修复!修复?那也就是说可以修复?(-_-!真蠢的问题)心情太激动了。
参考官方的资料:http://dev.mysql.com/doc/refman/5.0/en/repair.html
开始使用myisamchk工具开始尝试修复数据库。使用格式是:myisamchk -r XXX ,其中,XXX是错误信息里出问题的表名。具体更详细的命令可以看帮助:myisamchk --help;结果不到一秒钟,就提示修复完毕了。再打开我的博客,一切正常了!
后来在网上查找问题的原因,得到以下信息:
可以是因频繁查询和更新表造成的索引错误。还有说法为是MYSQL数据库因为某种原因而受到了损坏,如:数据库服务器突发性的断电、在提在数据库表提供服务时对表的原文件进行某种操作都有可能导致MYSQL数据库表被损坏而无法读取数据。总之就是因为某些不可测的问题造成表的损坏。
当你试图修复一个被破坏的表的问题时,有三种修复类型。如果你得到一个错误信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次--这通常是上一次修复操作遗留下来的。
这三种修复方法如下所示:
% myisamchk --recover --quick /path/to/tblName
% myisamchk --recover /path/to/tblName
% myisamchk --safe-recover /path/to/tblName
第一种是最快的,用来修复最普通的问题;而最后一种是最慢的,用来修复一些其它方法所不能修复的问题。
附: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
如果你不在数据库目录下,可通过指定到目录的路径检查所有在那里的表:
shell> myisamchk /path/to/database_dir/*.MYI
你甚至可以通过为MySQL数据目录的路径指定一个通配符来检查所有的数据库中的所有表:
shell> myisamchk /path/to/datadir/*/*.MYI
推荐的快速检查所有MyISAM表的方式是:
shell> myisamchk --silent --fast /path/to/datadir/*/*.MYI
如果你想要检查所有MyISAM表并修复任何破坏的表,可以使用下面的命令:
shell> myisamchk --silent --force --fast --update-state
-O key_buffer=64M -O sort_buffer=64M
-O read_buffer=1M -O write_buffer=1M
/path/to/datadir/*/*.MYI
该命令假定你有大于64MB的自由内存。关于用myisamchk分配内存的详细信息,参见5.9.5.5节,“myisamchk内存使用”。
当你运行myisamchk时,必须确保其它程序不使用表。否则,当你运行myisamchk时,会显示下面的错误消息:
warning: clients are using or haven't closed the table properly
这说明你正尝试检查正被另一个还没有关闭文件或已经终止而没有正确地关闭文件的程序(例如mysqld服务器)更新的表。
如果mysqld正在运行,你必须通过FLUSH TABLES强制清空仍然在内存中的任何表修改。当你运行myisamchk时,必须确保其它程序不使用表。避免该问题的最容易的方法是使用CHECK TABLE而不用myisamchk来检查表。
分享按钮
1

鲍尔默的咆哮:I am a PC
四种方法解决Firefox3启动慢

