报错信息:
select count(*) from xxx; 执行报错表数量查询,(这里会查询报错,不要着急往下走)
show PROCESSLIST; 查询执行任务,State中会显示(Repair by sorting)
kill ****; 关闭该任务
再运行上面的sql,就会报错Table ‘.’ is marked as crashed and last (automatic)
解决办法:
如果数据量大,涉及信息重要,最好不要在本服务器下修复数据,以免照成不必要的麻烦!
可通过服务器快照(有快照的前提下),先把快照做成镜像,然后买一个临时按量服务器(阿里很便宜,几毛一小时),租的时候选择自定以镜像,选择自己生成的镜像,就会生成一个临时的服务器,这个服务器就相当于是一个拷贝版本。(有的服务器挂载了云盘,记得挂载,这里不多解释)
通过mysql命令行来执行
1、service mysqld stop
停止mysql服务;
2、cd /var/local/mysql/table
切换到该表目录下(注意:不切换过来会总提示myisamchk一些错误导致失败);
3、myisamchk -r xxx.MYI
(如果还是提示错误,就多加一个参数-f 强制进行。)
切记一直等待!!!等出现下面的 Data records: 16591794(数据量) 就说成功了,表就可以操作了
Data records: 6822642
- Fixing index 1
- Fixing index 2
- Fixing index 3
- Fixing index 4
- Fixing index 5
- Fixing index 6
- Fixing index 7
- Fixing index 8 Data records: 16591794
service mysqld start
启动数据库,执行上面sql会发现可以查出数据量,说明表已经修复,转成sql,备份好数据,大功告成
参考文章地址,并详细补充