处理“Got error 127 from table handler”失败及教训
发布于 2007-12-26 19:28 阅读:54089 评论:1 标签: mysql

    昨天在处理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的说明

    比较有参考价值的回复如下:

以下是引用片段:
1 E_ERROR fatal run-time errors  
2 E_WARNING run-time warnings (non fatal errors)  
4 E_PARSE compile-time parse errors  
8 E_NOTICE  run-time notices (less serious than warnings)   
16 E_CORE_ERROR fatal errors that occur during PHP's initial startup PHP 4 only
32 E_CORE_WARNING warnings (non fatal errors) that occur during PHP's initial startup  PHP 4 only
64 E_COMPILE_ERROR fatal compile-time errors PHP 4 only

error 127就是同时存在2,4,8,16,32,64的错误
主要的是16和64,原因分析:可能是你装php的时候有问题,建议重装

    看得资料一般是说使用“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后再修复表。

    谁能告诉我这是怎么回事?非常感谢!

我也不知道

恩..呵呵!我也不知道
不过你研究出来了.告诉偶一下..偶也学习学习
偶把你的Blog链接放到偶QQ空间了.可以去看一下..

by sinper 2007-12-26 21:58:58