MySQL修复表的简单分析(r11笔记第19天)
公众号:杨建荣的学习笔记 · 作者:杨建荣 · 发布:2016-12-20 23:06:01 · 原文链接
今天有个同事问我一个数据库的问题,如果开始他就把环境细节全都告诉我,可能我就知难而退了。等我大体明白了问题之后,发现好像背景比我想的要复杂多了。这是一个远程云主机环境,windows系统,运行着MySQL,在查询表时出现了问题,而且开发同事经过了repair也没有修复,说会卡住没有响应。
当然费了一点功夫,好容易连接到了这台云主机,发现问题似乎比我想的还要复杂一些。当然这是一个内部某一个团队使用的一个环境,可能是确实需要用到环境,大家才不得不想办法修复。
环境是MySQL 5.5版本,查看后台日志发现从8月份就开始有错误了,错误信息如下:
161018 11:15:35 [ERROR] D:\websoft\mysql\bin\mysqld: Table '.\utestdb\test_forum_post' is marked as crashed and should be repaired161018 11:15:36 [ERROR] D:\websoft\mysql\bin\mysqld: Table '.\utestdb\test_forum_post' is marked as crashed and should be repaired而且看日志损坏的还不止一张表,我的注意力暂时先放在了出错的表上。
如果使用show create table test_forum_post或者desc test_forum_post都会抛出错误。
mysql> show create table test_forum_post;ERROR 145 (HY000): Table '.\utestdb\test_forum_post' is marked as crashed and should be repaired
更让我有些胆战心惊的是,我可以从后台的日志看到开发同事也尝试了多次重启MySQL服务。但是问题始终存在。
show create table 得不到信息,而show table status得到的信息也很有限,因为此时的存储引擎显示为NULL

他们用的是MyISAM,查看了其它所有的表的存储引擎,发现清一色都是MyISAM.所以我就可以基本断定这个出问题的表也是MyISAM
