深入探究mysql中frm文件的作用和原理(mysql中.frm)

深入探究MySQL中.frm文件的作用和原理

当我们在MySQL中创建表的时候,系统不仅会在数据库中创建对应的表结构,还会在磁盘上生成一个.frm文件。这个文件承载着表结构的定义信息,起到了非常重要的作用。下面我们就来深入探究MySQL中.frm文件的作用和原理。

作用

.frm文件是存储MySQL表结构定义信息的文件,包括表的名称、列名、数据类型、默认值、约束等等。当我们执行SELECT、INSERT、UPDATE、DELETE等操作时,MySQL会根据.frm文件中的定义信息进行验证和转换,从而确保数据的正确性和完整性。

此外,MySQL还利用.frm文件来实现表结构的缓存。当我们执行SELECT语句时,MySQL会先在内存中查找已经被缓存的表结构信息,如果找到就直接使用,如果没有找到则需要在磁盘中读取对应的.frm文件进行解析,然后缓存起来,以便以后使用。

原理

.frm文件的格式是由MySQL自己定义的,包括文件头信息和表结构信息两部分。

文件头信息:主要包括了文件格式版本号、MySQL版本号、表名称长度、列数、表行数等信息。

表结构信息:主要包括了列名、列数据类型、列长度、列约束(如PRIMARY KEY、FOREIGN KEY、UNIQUE)、默认值等信息,以及表的特殊属性(如表引擎、字符集等)。

.frm文件是按照二进制格式存储的,它的具体结构是:

![image.png](https://cdn.nlark.com/yuque/0/2022/png/2528545/1646988402756-d1c838b7-3182-46a7-8175-2d5b7eb9753f.png#clientId=u52cc0b11-c413-4&from=paste&height=230&id=uf1844f4e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=460&originWidth=658&originalType=binary&ratio=1&size=27302&status=done&style=none&taskId=u797e50c6-2082-4882-a370-e067be76f974&width=329)

在MySQL数据库实例启动时,会加载数据字典和缓存,其中缓存采用的是LRU算法,缓存的大小可以调整。LRU缓存中的表结构信息包括了.frm文件的元数据,这些元数据构成了MySQL数据字典,可以通过SHOW TABLES、DESC、SHOW FULL COLUMNS等命令对其进行查询。

由于每张表都对应了自己的.frm文件,因此如果我们需要移动表结构信息,例如把表从一个MySQL实例迁移到另一个实例,就需要同时将对应的.frm文件移动过去,并在新的实例中重新加载。

总结

.frm文件是MySQL存储表结构信息的关键文件,它不仅仅是MySQL中数据的组织方式,而且还是MySQL中缓存机制的载体之一。在MySQL中,我们可以通过SHOW TABLES、DESC、SHOW FULL COLUMNS等命令查询.frm文件中存储的表结构信息。如果需要迁移表结构和数据,必须要同时迁移表对应的.frm文件,否则无法恢复表结构信息。


数据运维技术 » 深入探究mysql中frm文件的作用和原理(mysql中.frm)