最近倒腾一些古董MySQL数据,以便将来查询,碰到一些MyISAM表丢失了MYI(索引)文件,无法读出来了,其实只要表定义能找到,是可以恢复过来的,我手上的表有两种情况,恢复起来要分别对待:

  1. 未压缩的表
    这个好办,运行mysql命令 REPAIR TABLE `tablename` USE_FRM,通过表定义文件就重建出来了。
  2. 压缩过的表
    新建一个相同表结构的空表,然后压缩它,把索引文件拷贝成待恢复表的MYI,对待恢复表执行解压缩:myisamchk --unpack tablename,搞定!连索引文件都重建好了。

恢复好的表,检查一下基本属性和索引,有些参数可能丢失了,需要重设。
现在知道了吧,表定义在恢复数据的时候非常重要,以后必定保存好创建语句。
还有千万要备份,并且要分开存放。