本帖最后由 time_is_life 于 2013-06-01 18:55:24 编辑

解决方案 »

  1.   

    这个需要下载MYISAM存储引擎的源代码来分析了。其中有具体的物理文件结构说明。但估计看过的人不多。
      

  2.   

    22.3.1. Layout of the Record Storage Frame (Record Part, Record Block)
    MI_MIN_BLOCK_LENGTH   20            /* 20 bytes are required for the biggest frame type: Deleted block. */
     MI_MAX_BLOCK_LENGTH   16777212      /* 16MB - 4, max 3 bytes for length available, 4-byte aligned. */
     MI_DYN_ALIGN_SIZE     4             /* Frames start a 4-byte boundaries. */
     Part header[0] (decimal/hexadecimal, one byte): 
    0/00: Deleted block
             block_len 3 bytes [1-3]
             next_filepos 8 bytes [4-11]
             prev_filepos 8 bytes [12-19]
             => header length 20
    1/01: Full small record, full block
             rec_len,data_len,block_len 2 bytes [1-2]
             => header length 3
    2/02: Full big record, full block
             rec_len,data_len,block_len 3 bytes [1-3]
             => header length 4
    3/03: Full small record, unused space
             rec_len,data_len 2 bytes [1-2]
             unused_len 1 byte [3]
             => header length 4
    4/04: Full big record, unused space
             rec_len,data_len 3 bytes [1-3]
             unused_len 1 byte [4]
             => header length 5
    5/05: Start small record
             rec_len 2 bytes [1-2]
             data_len,block_len 2 bytes [3-4]
             next_filepos 8 bytes [5-12]
             => header length 13
    6/06: Start big record
             rec_len 3 bytes [1-3]
             data_len,block_len 3 bytes [4-6]
             next_filepos 8 bytes [7-14]
             => header length 15
    7/07: End small record, full block
             data_len,block_len 2 bytes [1-2]
             => header length 3
    8/08: End big record, full block
             data_len,block_len 3 bytes [1-3]
             => header length 4
    9/09: End small record, unused space
             data_len 2 bytes [1-2]
             unused_len 1 byte [3]
             => header length 4
    10/0A: End big record, unused space
             data_len 3 bytes [1-3]
             unused_len 1 byte [4]
             => header length 5
    11/0B: Continue small record
             data_len,block_len 2 bytes [1-2]
             next_filepos 8 bytes [3-10]
             => header length 11
    12/0C: Continue big record
             data_len,block_len 3 bytes [1-3]
             next_filepos 8 bytes [4-11]
             => header length 12
    13/0D: Start giant record
             rec_len 4 bytes [1-4]
             data_len,block_len 3 bytes [5-7]
             next_filepos 8 bytes [8-15]
             => header length 16
      

  3.   

    谢谢楼上,看了源代码,很复杂,一时还搞不定。
    我用delete语句误删了表里的数据,没有启动binlog,没有备份。
    所以想从MRD文件中把数据恢复出来。
    我再慢慢研究一下源代码吧。估计要很久才能写出读取的程序。
      

  4.   

    数据已删,无备份,无binlog, 没有办法了,逼上梁山。