Chinaunix首页 | 论坛 | 博客
  • 博客访问: 670298
  • 博文数量: 121
  • 博客积分: 1425
  • 博客等级: 中尉
  • 技术积分: 2059
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-03 15:34
文章分类

全部博文(121)

文章存档

2018年(1)

2017年(2)

2016年(1)

2015年(11)

2014年(14)

2013年(47)

2012年(45)

分类: IT职场

2014-04-12 22:47:59

今晚突然发现mysql的一张表损坏了
====================================================
140412  3:28:19 [ERROR] Got error 126 when reading table './ugamehomedbtest/ucen_members'
140412  3:28:44 [ERROR] /usr/local/mysql/bin/mysqld: Incorrect key file for table './ugamehomedbtest/ucen_members.MYI'; try to repair it
====================================================================================

这个时候需要修复他
1.检查表是否有错误
check table tablename对MyISAM和InnoDB表有作用。对于MyISAM表,关键字统计信息会被更新,check table也可以检查视图是否有错误,
比如在视图定义中被引用的表已不存在。

 

一些只对myisam表有作用(对innodb和视图无效)的选项介绍:
quick:不扫描行,不检查错误的链接。
fast:只检查没有被正确关闭的表。
changed:只检查自上次检查后被更改的表,和没有被正确关闭的表。
medium:扫描行,以验证被删除的链接是有效的。也可以计算各行的关键字校验和,并使用计算出的校验和验证这一点。
extended:对每行的所有关键字进行一个全面的关键字查找。这可以确保表是100%一致的,但是花的时间较长,所以很少使用。

我这样做:

mysql> check table  ucen_members medium;  此句等于:# myisamchk --medium-check ucen_members
+------------------------------+-------+----------+-----------------------------------------------------------+
| Table                        | Op    | Msg_type | Msg_text                                                  |
+------------------------------+-------+----------+-----------------------------------------------------------+
| ugamehomedbtest.ucen_members | check | warning  | Table is marked as crashed                                |
| ugamehomedbtest.ucen_members | check | warning  | 7 clients are using or haven't closed the table properly  |
| ugamehomedbtest.ucen_members | check | error    | Size of indexfile is: 13149184        Should be: 16695296 |
| ugamehomedbtest.ucen_members | check | error    | Corrupt                                                   |
+------------------------------+-------+----------+-----------------------------------------------------------+


快速检查没有被正确关闭的表
mysql> check table t1 quick fast;


这样来修复好这个表
mysql> repair table ucen_members;
+------------------------------+--------+----------+----------------------------------------------+
| Table                        | Op     | Msg_type | Msg_text                                     |
+------------------------------+--------+----------+----------------------------------------------+
| ugamehomedbtest.ucen_members | repair | warning  | Number of rows changed from 567263 to 567262 |
| ugamehomedbtest.ucen_members | repair | status   | OK                                           |
+------------------------------+--------+----------+----------------------------------------------+

 

repair table tablename  #用于修复被破坏的表
默认情况下,repair table 与 myisamchk --recover tablename具有相同的效
repair对MyISAM和ARCHIVE表起作用


语法如下:
repair [LOCAL | NO_WRITE_TO_BINLOG] table    tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]
 

quick:repair只修复索引,等价于“myisamchk --recover --quick tablename”
extended:MySQL会一行一行地创建索引行,等价于”myisamchk --safe-recover tablename“
use_frm:如果.MYI索引文件缺失或标题被破坏,则使用此选项,用来自.frm文件重新创建.MYI文件。这种修复不能使用myisamchk来完成;在repair常规无法完成时,才会使用这个选项,如果表被压缩不能使用。

no_write_to_binlog:repair默认是写到二进制文件的,如果有主从模式的话,repair也会在从库执行;使用此选项将会禁止写入到二进制文件中。

 

 

 

 

阅读(1109) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~