MySQL Table ‘***’ is marked as crashed and should be repaired 彻底解决

  • 发表于
  • 日志

今天起来发现站点打开异常缓慢,基本上10秒能打开就打开,打不开就爆数据库连接错误“Database connection error”,或者直接来个“502 Bad Gateway”。第一感觉是被攻击了,马上进行了排查(5个命令检查Linux中内存使用情况),查清原因后马上处理。

其中之一就是“ MySQL Table '***' is marked as crashed and should be repaired”,进入相应数据库查看大概有十个表都报这个数据表损坏错误,现在修复它,提供两种修复方式 。

先备份整个数据库

方法一:使用mysqlcheck修复数据表

# mysqlcheck -u root -p qqtexas
Enter password:

备份数据库,添加 --auto-repair 参数自动修复

# mysqldump -u root -p qqtexas > qqtexas.sql
Enter password:

# mysqlcheck -u root -p qqtexas --auto-repair
Enter password:
wordpress.wp_term_taxonomy
error: Table upgrade required. Please do "REPAIR TABLE `wp_term_taxonomy`" or dump/reload to fix it!
wordpress.wp_terms
error: Table upgrade required. Please do "REPAIR TABLE `wp_terms`" or dump/reload to fix it!
wordpress.wp_usermeta
error: Table upgrade required. Please do "REPAIR TABLE `wp_usermeta`" or dump/reload to fix it!
wordpress.wp_users
error: Table upgrade required. Please do "REPAIR TABLE `wp_users`" or dump/reload to fix it!

Repairing tables
qqtexas.wp_commentmeta OK
qqtexas.wp_commentsOK
qqtexas.wp_links OK

为了安全起见,以下两种方法不建议在生产环境中使用

#mysqlcheck -a -o -r -p //检查优化并修复所有的数据库
#mysqlcheck -A -o -r 数据库名称 -p //修复指定的数据库

参数含意:

-a = Analyse given tables. //分析数据表
-c = Check table for errors //检查数据库中错误(损坏)的表
-o = Optimise table //优化数据表
-r = Can fix almost anything except unique keys that aren’t unique // 修复损坏的数据表
-m = –medium-check 

方法二:使用Navicat修复数据库

  • 连接上数据库,选择表
  • 右键->Maintain(维护)->Repair Tables(修复表)->Extended(扩展)
MySQL Table '***' is marked as crashed and should be repaired 彻底解决
Repairing MySQL Database
MySQL Table '***' is marked as crashed and should be repaired 彻底解决
修复MySql数据表(Repairing MySQL Database)

Windows和OSX版本是一样的操作,因为没Windows环境,自己截图截出来的太大(400KB),所以用了网图。Windows操作那个使用的是Quick(快速)修复,为了保险起见,建议使用Extended(扩展)修复数据表。

等一会,会提示修复完成,现在你再打开数据库看,应该都正常了。

参考