当我们用PHPMyAdmin浏览数据库时,有时候会发现某些MyISAM表的Collation项显示为“in use”,这多半说明此表已经损坏。即便是没有出现“in use”字样,也不能就此说明表是完好无损的,熟悉检查及修复方法是必须的。
通过语句:
检查表使用CHECK TABLE语句,如下:
CHECK TABLE tbl_name [, tbl_name] … [option] …
option = {FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
修复表使用REPAIR TABLE语句,如下:
REPAIR [NO_WRITE_TO_BINLOG | LOCAL] TABLE
tbl_name [, tbl_name] …
[QUICK] [EXTENDED] [USE_FRM]
通过命令:
检查修复表可以使用myisamchk命令:
myisamchk [options] tbl_name …
如果没有指定参数,那么myisamchk命令缺省执行的就是检查动作。若是要修复表,可以使用-r或-o参数,应该优先使用-r修复,不行的话再使用-o修复。此外,在修复前应该使用FLUSH TABLES刷新缓存,并关闭数据库服务器或者锁定所有的待修复表,以确保在修复过程中不会有其他写操作。
自动修复:
在my.cnf配置文件中的mysqld部分设定myisam-recover参数,当服务启动时可以自动修复有问题的表(速度快慢视数据多少):
[mysqld]
myisam-recover [= options]
参数有DEFAULT,BACKUP,FORCE,QUICK,可以设定为BACKUP,FORCE,万万不可单独设置成FORCE,否则数据文件丢了都没处哭去。
参考文档:How to Repair Tables