数据库

MySQL错误修复记录:Table xx is marked as crashed and should be repaired

Jager · 5月17日 · 2016年 · 1155次已读

昨晚入睡后,收到松哥的 QQ 消息,说松松商城打开报错,于是手机 QQ 上打开了首页地址,发现有如下报错:MySQL错误修复记录:Table xx is marked as crashed and should be repaired

MySQL server error report:Array ( [0] => Array ( [message] => MySQL Query Error ) [1] => Array ( [sql] => SELECT u.user_name, og.goods_number, oi.add_time, IF(oi.order_status IN (2, 3, 4), 0, 1) AS order_status FROM `hide_songsong`.`ecs_order_info` AS oi LEFT JOIN `hide_songsong`.`ecs_users` AS u ON oi.user_id = u.user_id, `hide_songsong`.`ecs_order_goods` AS og WHERE oi.order_id = og.order_id AND og.goods_id = 213 ORDER BY oi.add_time DESC LIMIT 50 ) [2] => Array ( [error] => Table 'ecs_users' is marked as crashed and should be repaired ) [3] => Array ( [errno] => 1194 ) )

关键报错信息:

Table 'ecs_users' is marked as crashed and should be repaired

提示这张表损坏了,必须修复,登陆服务器之后,开始修复,以下记录备忘。

1、尝试使用 myisamchk 命令对所有表索引文件进行修复:

myisamchk --safe-recover /path/to/*.MYI

- recovering (with sort) MyISAM-table 'ecs_users.MYI'
Data records: 2593
- Fixing index 1
- Fixing index 2
- Fixing index 3
- Fixing index 4
- Fixing index 5
*******

2、刷新首页依然报错,于是登陆 MySQL,执行 REPAIR TABLE ecs_users;

mysql> REPAIR TABLE ecs_users;
+-------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------+
| Table                   | Op     | Msg_type | Msg_text                                                                                                    |
+-------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------+
| hide_songsong.ecs_users | repair | error    | 1 when fixing table                                                                                         |
| hide_songsong.ecs_users | repair | Error    | Can't change ownership of the file '/HIDE_songsong/ecs_users.MYD' (Errcode: 1) |
| hide_songsong.ecs_users | repair | status   | Operation failed                                                                                            |
+-------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------+
3 rows in set (0.02 sec)

3、提示无法修改拥有着属性,应该是上一步使用 myisamchk 命令时文件所属变成了 root 了,于是用 chown 更该拥有者:

chown -R mysql:mysql /HIDE_songsong/*

4、然后继续登陆 MySQL 执行 REPAIR TABLE ecs_users;  成功:

mysql> use hide_songsong;
Database changed
mysql> REPAIR TABLE ecs_users;
+-------------------------+--------+----------+----------+
| Table                   | Op     | Msg_type | Msg_text |
+-------------------------+--------+----------+----------+
| hide_songsong.ecs_users | repair | status   | OK       |
+-------------------------+--------+----------+----------+
1 row in set (0.02 sec)

mysql>

在刷新网站,已经正常:MySQL错误修复记录:Table xx is marked as crashed and should be repaired

 

事后总结:一般这个报错都是因为数据库表索引文件损坏导致的,发现这类错误可以尝试使用 phpMyAdmin 的 Repair 自动修复功能。如果不行,先将数据库文件做好备份,然后按照本文的步骤尝试修复吧。

32 条回应
  1. 虫虫学车 2016-5-18 · 11:39

    学习中,欢迎互踩

  2. 语约影评网 2016-5-18 · 14:29

    博主不错哦,现在都已经给松松博客提供技术支持了,赞!

  3. 小C博客 2016-5-18 · 21:49

    张哥,表损坏是什么情况?我还没遇到过这种问题,你这个解决方法挺不错的。

    • avatar
      Jager 2016-5-19 · 9:14

      前人是这样说的:

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

  4. 实惠网 2016-5-19 · 2:25

    学习了,受益匪浅,备用!

  5. iPhone 吧 2016-5-19 · 9:25

    感谢分享,标记一个留着,以后万一用得着。

  6. 夏日博客 2016-5-19 · 10:58

    换上我的话,只能自动修复了。

  7. 北京婚礼策划 2016-5-19 · 13:08

    学习中,这个情况看了博主的文章才意识到有可能会发生,记下了,谢谢博主分享经验

  8. aunsen 2016-5-19 · 15:29

    腾讯云的学生VPS怎么样?能应付500+IP的站点不

    • avatar
      Jager 2016-5-19 · 18:28

      绝逼够了

      • aunsen 2016-5-19 · 21:51

        那我去搞一台玩玩,最烦备案啊!!!

        • avatar
          Jager 2016-5-21 · 16:15

          备案是很蛋疼,我也不喜欢

  9. 夏天烤洋芋 2016-5-19 · 15:39

    反正是看不懂的。

  10. 洞潭村农业 2016-5-19 · 21:16

    学习了,专业的文章

  11. 憧憬Licoy 2016-5-19 · 21:37

    为什么会损坏呢?

    • avatar
      Jager 2016-5-21 · 16:15

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

  12. 微部落博客 2016-5-19 · 21:54

    博主用的是云主机吗?云主机貌似很贵,要好几百一个月吧。。。。
    我一直用着虚拟主机,今天空间商居然把我网站关了,跟我说我的网站消耗CPU资源太多,要我升级云主机,一看价格。。吓死我了,幸亏我找他们说了一通,给我打开了,但是我目前为止还是找不到原因,心里好忐忑啊。

    • avatar
      Jager 2016-5-21 · 16:14

      50左右一个月,不用好几百的。

  13. 爱杂侃 2016-5-20 · 12:52

    博主很厉害,学习了.

  14. 虫虫学车 2016-5-20 · 15:06

    好看的主题。。good

  15. 深蓝 2016-5-20 · 17:01

    发现phpmyadmin用来管理mysql其实挺好,尤其是状态页的各种建议,对照调优很有帮助。
    另外博客前几天是不是挂了,打不开。

    • avatar
      Jager 2016-5-21 · 16:14

      可能折腾挂了。。。

  16. 雅兮网 2016-5-21 · 11:35

    Jager是技术牛,非常专业
    为什么我看到大家的评论都是空白呢?

    • avatar
      Jager 2016-5-21 · 16:13

      ╮(╯▽╰)╭ 记录而已。。
      折腾主题中,已解决。

  17. 龙笑天 2016-5-21 · 17:17

    蛋疼啊,我的Firefox 28还是不能正常打开贵站,提示“https已经下线...”
    关键是我输入“zhang.ge”、或“https://zhang.ge”都会自动跳到“https://zhang.ge”
    难道是因为我的火狐存了很多你网站的https地址的书签?

    • avatar
      Jager 2016-5-21 · 18:51

      需要清理浏览器历史缓存,因为浏览器缓存了301

  18. 寻金笔记 2016-5-22 · 18:11

    学习了!给力。

  19. 四川卫校 2016-6-3 · 10:31

    博主不错,很好的一个博客。

  20. 筑楼 2016-6-3 · 21:20

    昨天他的 网站就打不开啊! 百度加速 一直提示 520? 还是522来着???

  21. 又涨知识了,感谢博客的分享~原来报错的原因还可能是这样啊。。。。。

  22. 感谢分享,学习中!

  23. 海外敗 2016-6-8 · 22:45

    学习中,赞一个!