myisam表修复---check/repair
myisam表修复---check/repair
在检查、修复表,除了用myisamchk,还可以用check table、repair table来完成,下面来总结下
1.检查表是否有错误
CHECK TABLE对MyISAM和InnoDB表有作用。对于MyISAM表,关键字统计信息会被更新,CHECK TABLE也可以检查视图是否有错误,
比如在视图定义中被引用的表已不存在。
一些只对myisam表有作用(对innodb和视图无效)的选项介绍:
QUICK:不扫描行,不检查错误的链接。
FAST:只检查没有被正确关闭的表。
CHANGED:只检查自上次检查后被更改的表,和没有被正确关闭的表。
MEDIUM:扫描行,以验证被删除的链接是有效的。也可以计算各行的关键字校验和,并使用计算出的校验和验证这一点。
EXTENDED:对每行的所有关键字进行一个全面的关键字查找。这可以确保表是100%一致的,但是花的时间较长,所以很少使用。
常用的全面常规检查
mysql> check table t1 medium;
等价
# myisamchk --medium-check tablename
快速检查没有被正确关闭的表
mysql> check table t1 quick fast;
2.修复有错误的表
REPAIR TABLE用于修复被破坏的表。
默认情况下,REPAIR TABLE与myisamchk --recover tbl_name具有相同的效。
REPAIR TABLE对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也会在从库执行;使用此选项将会禁止写入到二进制文件中。