昨天在处理mysql数据的时候提示:Got error 127 from table handler。症状为:取出前面的数据没问题,但是在遇到一条游问题的数据时显示“Got error 127 from table handler”。
上网查询资料如下:
以下是引用片段:
1:Got error 127 from table handler
2:MySQL : GOT error 127 from table handler
3:表被破坏
4:手册对repair table的说明
5:手册对check table的说明
比较有参考价值的回复如下:
以下是引用片段: error 127就是同时存在2,4,8,16,32,64的错误 |
看得资料一般是说使用“REPAIR TABLE `tablename`”去修复表,看了手册的说明后操作如下:
以下是代码片段: mysql> check table mytable; +-------------------+-------+----------+----------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +-------------------+-------+----------+----------------------------------------------------+ | mydb.mytable | check | error | got error: 5 when reading datafile at record: 1291 | | mydb.mytable | check | error | Corrupt | +-------------------+-------+----------+----------------------------------------------------+ 2 rows in set (3.09 sec) |
check的结果与测试得到的差错点一致,为第1291条数据开始便有问题了!然而在这个时候尝试取出数据时失败了:
以下是代码片段: mysql> select * from `mytable` limit 1291, 1; ERROR 1016: Can't open file: 'mytable.MYD'. (errno: 145) |
真是无语啊........骑虎难下,继续操作,希望还有救:
以下是代码片段: mysql> repair table mytable; +-------------------+--------+----------+----------------------------------------+ | Table | Op | Msg_type | Msg_text | +-------------------+--------+----------+----------------------------------------+ | mydb.mytable | repair | warning | Number of rows changed from 30030 to 0 | | mydb.mytable | repair | status | OK | +-------------------+--------+----------+----------------------------------------+ 2 rows in set (3.10 sec) |
疯了!30030条数据全没了!幸好还有备用的数据库,把数据文件和索引文件直接copy了过来,修改文件的权限后,数据能正常取出了。
为什么会这样呢?原因不详,只能吸取教训:
1:修复表时最好先锁定表。
2:最好是在把mysql shut down后再修复表。
谁能告诉我这是怎么回事?非常感谢!