MySQL 的 .frm 文件是否有比 dev.mysql.com 上的更新的规范?我正在尝试手动解析它(不要问......只是在试验;而不是试图恢复任何东西)。
“表 11.1 .frm 文件头部分”的第一部分大部分都匹配,但之后我不知道该怎么做。
“表 11.2 .frm 文件密钥信息部分”说“引擎名称”位于 0x101a,但我在 .frm 文件中的 0xAA39 处找到“InnoDB”。我猜这些偏移量实际上并不准确,它们取决于索引的数量等。
如何计算“表 11.4 .frm 文件列信息部分”开始位置的实际偏移量?
这有点晚了,但万一有人仍然感兴趣......
我一直在帮助一个学生编写一个程序(用 PHP!),通过尝试直接解析 .frm 文件来重新创建 mySQL .frm 文件中隐含的 CREATE TABLE 语句。(是的,我们知道它可以用各种工具来完成!!)。
追踪文件的结构非常困难,并且上面mpen在站点参考中提供的内容不完整,有时甚至不正确。
最终,我能够找到 mysqlfrm.exe 的源代码,并从那里找到执行 .frm 文件解析的特定类文件。它是用 Python 编写的,可读性很强——即使你有点懂这门语言。
我能够使用这个文件(除了一些小的更正)来计算 .frm 文件中存储所有内容的索引以及如何恢复各个字段。
链接在这里...
http://www.commongrounds.co.uk/Library/lib/python2.7/site-packages/mysql/utilities/common/?DA并且所需的文件恰当地命名为 frm_reader.py/
别说.frm文件格式被遗忘了!!
我认为即使在 Oracle 中也没有人知道 .frm 格式。因为如果你玩
mysqlfrm
你会注意到它实际上启动了 mysqld 来读取一个 .frm 文件。据我记得,列在文件末尾列出。
strings tbl.frm
将向他们展示。显然,这些只是列名,而不是完整信息。