如何用C语言操作.MYD文件? 本帖最后由 time_is_life 于 2013-06-01 18:55:24 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个需要下载MYISAM存储引擎的源代码来分析了。其中有具体的物理文件结构说明。但估计看过的人不多。 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 201/01: Full small record, full block rec_len,data_len,block_len 2 bytes [1-2] => header length 32/02: Full big record, full block rec_len,data_len,block_len 3 bytes [1-3] => header length 43/03: Full small record, unused space rec_len,data_len 2 bytes [1-2] unused_len 1 byte [3] => header length 44/04: Full big record, unused space rec_len,data_len 3 bytes [1-3] unused_len 1 byte [4] => header length 55/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 136/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 157/07: End small record, full block data_len,block_len 2 bytes [1-2] => header length 38/08: End big record, full block data_len,block_len 3 bytes [1-3] => header length 49/09: End small record, unused space data_len 2 bytes [1-2] unused_len 1 byte [3] => header length 410/0A: End big record, unused space data_len 3 bytes [1-3] unused_len 1 byte [4] => header length 511/0B: Continue small record data_len,block_len 2 bytes [1-2] next_filepos 8 bytes [3-10] => header length 1112/0C: Continue big record data_len,block_len 3 bytes [1-3] next_filepos 8 bytes [4-11] => header length 1213/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 谢谢楼上,看了源代码,很复杂,一时还搞不定。我用delete语句误删了表里的数据,没有启动binlog,没有备份。所以想从MRD文件中把数据恢复出来。我再慢慢研究一下源代码吧。估计要很久才能写出读取的程序。 数据已删,无备份,无binlog, 没有办法了,逼上梁山。 datafactory连mysql数据库 有没有用ER图建数据库一步一步的例子? 这个是什么原因啊,哪位大侠给我看看!!! 计算两个时间戳差多少个小时? 关于MYSQL存储过程的问题 怎么样备份sql数据库结构? vb中使用postgresql碰到的大字段问题 XP下面winmysqladmin怎么没法启动服务啊 MYSQL表记录数大于2000行,则再增加的话从第一行开始覆盖,应该如何写 求SQL,给MYSQL时间加上指定的秒。 求一段sql,谢谢 求sql优化,取两个表的某字段的位置交集
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
我用delete语句误删了表里的数据,没有启动binlog,没有备份。
所以想从MRD文件中把数据恢复出来。
我再慢慢研究一下源代码吧。估计要很久才能写出读取的程序。