首页
学习
活动
专区
圈层
工具
发布

mysql frm是什么文件

MySQL的FRM文件是MySQL表定义文件,它包含了表的定义信息,如表结构、列的数据类型、索引等。每个MySQL表都有一个对应的FRM文件,该文件在创建表时自动生成,并且与表的数据文件(MYD)和索引文件(MYI)分开存储。

基础概念

  • FRM文件:存储表的元数据,即表的结构信息。
  • MYD文件:存储表的数据。
  • MYI文件:存储表的索引。

优势

  • 结构独立性:FRM文件使得表的结构与数据分离,便于管理和维护。
  • 备份与恢复:可以单独备份表结构,而不需要备份整个数据库。
  • 迁移与复制:在不同的数据库实例之间迁移表结构时,只需复制FRM文件即可。

类型

  • InnoDB表:使用FRM文件存储表结构。
  • MyISAM表:同样使用FRM文件存储表结构,但数据和索引分别存储在MYD和MYI文件中。

应用场景

  • 数据库备份与恢复:在备份数据库时,可以单独备份FRM文件以快速恢复表结构。
  • 数据库迁移:在不同服务器或不同数据库实例之间迁移表结构时,FRM文件是关键。
  • 数据库复制:在主从复制中,FRM文件用于同步表结构。

常见问题及解决方法

1. FRM文件损坏

原因:硬件故障、磁盘错误或MySQL崩溃可能导致FRM文件损坏。 解决方法

  • 使用备份恢复FRM文件。
  • 如果没有备份,可以尝试使用mysqlfrm工具从数据文件中提取表结构。

2. FRM文件丢失

原因:误删除或磁盘故障可能导致FRM文件丢失。 解决方法

  • 如果有备份,恢复FRM文件。
  • 如果没有备份,可以尝试从其他相同结构的表中复制FRM文件,然后修改表名和相关配置。

3. FRM文件与数据文件不匹配

原因:表结构被修改,但FRM文件未更新,或者数据文件被错误地替换。 解决方法

  • 使用ALTER TABLE命令重新生成FRM文件。
  • 确保数据文件和FRM文件匹配,必要时手动同步。

示例代码

假设FRM文件损坏,可以使用以下步骤恢复:

  1. 备份现有表结构
  2. 备份现有表结构
  3. 删除损坏的表
  4. 删除损坏的表
  5. 重新创建表结构
  6. 重新创建表结构
  7. 导入备份的结构
  8. 导入备份的结构

参考链接

希望这些信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用Shell恢复MySQL .frm和.ibd文件

这是学习笔记的第 1901篇文章 MySQL里面对于表的默认的配置是每个表都有独立的文件.ibd和.frm文件对应,对于数据恢复来说,会提供很大的便利。...其中.frm文件存储了表结构定义信息,而.ibd文件存储了真正的数据。...如果某种特殊情况下,你只有.frm文件和.ibd文件,能不能单独恢复出来数据呢,答案是肯定的,当然这个过程不是一个命令搞定,而是需要一些方法和技巧。...比如.frm文件,我们拿到这个二进制文件的时候,其实我们也不知道里面到底有多少字段,怎么把DDL结构解析出来呢,这是第一个问题,而这个问题解决了之后,后续的问题其实就迎刃而解,我们可以完全使用迁移表空间的方式来处理...所以在恢复.frm和.ibd文件的时候,难点在于如何解析得到建表的DDL语句。 在这里我们要做个小把戏,需要预创建一个同名的表,然后通过交换frm文件来变相得到DDL语句。

3.5K20
  • 宝塔面板用frm和ibd文件恢复Mysql数据

    ,那你直面的就不是sql文件,而是.frm与.ibd文件。...这里顺便介绍一下.frm文件与.ibd文件与.ibdata文件 .frm:与表相关的元数据信息都存放在.frm文件中,主要是表结构的定义信息,不论什么存储引擎,每一个表都会有一个以表名命名的.frm文件...修改为独享表空间的方法是在my.ini配置文件中添加/修改此条: Innodb_file_per_table=1 mysql存储的所有数据文件都在data,而我们只有.frm与.ibd 这些在数据库里面可以看见...服务 net stop mysql 或者点击计算机--管理--服务--找到Mysql 然后关闭 3 复制备份的.frm覆盖新建的表.frm 4 开启mysql服务 net start mysql 5.在...服务 net stop mysql 然后再复制备份的.frm覆盖新建的表.frm 修改配置文件my.ini在[mysqld]下添加/修改innodb_force_recovery=6,一般这一段是没有的

    4.4K40

    MySQL备份文件.ibd、.frm、.MYD、.MYI的恢复教程

    根据网友的截图得知是他在恢复数据文件 .frm 时,报出的异常。error: 1146: Table ‘xxx’ doesn’t exist ?...MySQL 数据库是具有持久化能力的。也就是说它的所有数据,其实最终都是存储在文件中的。如果你用的是 MyIsAM,则一张表数据文件有 3 个。 ?...如果是 InnoDB,则一张表有 2 个数据文件。 ? 且这些文件,一般在你安装 MySQL 目录中的 Data 目录中。 ?...然后,我们将 test_2019.ibd 和 test_2019.frm 两个文件复制到本地的其他目录。 要恢复 test_2019 这张表,我们先要用 SQL 创建出这种表。 ?...表创建出来之后,我们就可以到 /usr/local/var/mysql/test/ 替换 test_2019.ibd 和 test_2019.frm 两个文件了。 接着重启 MySQL 服务即可了。

    4.7K20

    只有frm和ibd文件如何恢复mysql数据库

    MySQL的数据文件分为两种类型:.frm文件和.ibd文件。.frm文件存储表结构的元数据,而.ibd文件存储实际的数据和索引。...(2)将.frm文件和.ibd文件放置在正确的位置:将原始数据库的.frm文件和.ibd文件复制到新MySQL实例的数据目录下,即数据库目录下的相应子目录。...文件路径的组织方式可能会因MySQL版本而异。 (3)MySQL官方提供了一个工具叫做mysqlfrm,可以从.frm文件中生成CREATE TABLE语句。...你可以将这些语句复制到新的MySQL实例中执行,以重建表结构。 (4)恢复.ibd文件:由于.ibd文件包含实际的数据和索引,你需要确保它们正确地对应到.frm文件中定义的表。...byte-by-byte读取.frm文件,尽可能多的恢复信息。该模式有更多的局限性,不能校验字符集;使用默认模式无法读取文件或者该服务器上没有安装MySQL实例,此时就需要使用诊断模式。

    2K10

    从 Anemometer BUG 到 FRM 文件的恢复

    题目是Anemometer, 估计大部分不是MYSQLER的不大清楚这是个什么东西,其实这是几年前通过WEB界面查询MYSQL 慢查询的一个方法,安装上,通过一些脚本,就可以让每个MYSQL的服务器的慢查询显示出来...按下锅盖,起了瓢,最近MYSQL 的测试服务器,因为整改,原来的设置, 所有的文件都没有per file ,而是都在一个ibd 文件,整改后就出了问题,数据读不出来了,测试的数据倒是不重要,但是表结构对于测试时重要的...,开发人员希望能恢复MYSQL 的表结构,根据原来的经验,直接的选择就是 mysql-utilties 工具集合里面的 frm文件修复,本来想的很简单,现实很骨感,服务器上的PYTHON 版本 3.6,...搞到最后,连YUM 都不OK 了,(因为YUM 使用PYTHON),所以最后的结果是从新找了太干净的机器,按照老的方法把 mysql-utitiles 装上,然后恢复FRM 文件,本来还在担心这个工具集已经走到生命的终点...后来一想,MYSQL 8.0 就没有 FRM 文件了,这个功能就不需要在担心了。

    1.1K20

    利用frm文件和ibd文件恢复表数据

    // 利用frm文件和ibd文件恢复表数据 // frm文件和ibd文件简介 在MySQL中,如果我们使用了默认的存储引擎innodb创建一张表,那么在文件夹下面就会出现表名.frm和表名.ibd...,而frm文件是innodb的表结构文件,mysiam存储引擎的表中,frm是表结构,MYI文件是索引文件,而MYD文件是数据文件,从这里也可以看出,innodb存储引擎的索引和数据是在一起的,而Myisam...我们可以使用frm文件盒ibd文件来对数据进行恢复。下面我们分析分析这个过程。 ? frm文件恢复表结构 当然,表结构需要使用frm文件来恢复。...此时你可能很容易就能想到,如果我们把这个aaa表的字段调成10个,那么最终的结果是什么呢?...总结一下利用frm文件恢复表结构的步骤: 1、首先创建一个同名的表,然后启动实例 2、使用备份的frm文件替代生成的frm文件,重启实例 3、查看错误日志,从错误日志中获取到备份的frm文件中的字段数量

    8.5K20

    frm2sdi(3) 将frm文件转为sdi page & ibd2sql v1.9 出土

    导读终于来到frm2sdi的最后一章, 本章将如何将frm转为sdi. 前面两张分别将了frm的结构和sdi的结构. 但frm有部分元数据信息没有细看, 主要是太复杂了, 所以挪到本章来讲....待我们将frm转为sdi之后, 我们就可以使用ibd2sql来直接解析mysql 5.7的文件了, 不在需要转到8.0里面去了.最终效果大概如下:decimal的0开头懒得去掉了, 毕竟这只是一个过渡版本..., 即自动解析frm文件并构造一个sdi page....--ddl虽然看着比较怪, 明明是解析frm文件, 却指定的是ibd文件....总结frm主要是信息比较紧凑, 而且不容易扩展. sdi就是压缩的json数据(普通数据行), 长度可达4GB?...对于直接解析mysql 5.7环境的frm的前提条件: 要求同目录下存在同名的.frm文件.

    75120

    技术分享 | 只有.frm和.ibd文件时如何批量恢复InnoDB的表

    ---- 背景 很多时候因为 MySQL 数据库不能启动而造成数据无法访问,但应用的数据通常没有丢失,只是系统表空间等其它文件损坏了,或者遇到 MySQL 的 bug。...mysqlfrm 从 .frm 文件里面找回建表语句。...// 分析一个 .frm 文件生成建表的语句 mysqlfrm --diagnostic / var /lib/mysql/test/t1.frm // 分析一个目录下的全部.frm文件生成建表语句...导入旧的数据文件 将新建的没有包括数据的 .ibd 文件抛弃 root@username: /var/ lib/mysql/my_db # ll *.ibd|wc 124 1116 7941 root...然后把旧的有数据的 .ibd 文件拷贝到这个 my_db 目录下面,别忘了把属主改过来:chown mysql. *,再把这些数据文件 import 到数据库中。

    2.4K10

    mdf文件和ldf文件是什么?

    在微软的SQL Server 2000 数据库有三种类型的文件: 类型 缩写 中文意思 mdf primary data file 主要数据文件 ndf secondary data files 次要数据文件...ldf Log data files 事务日志文件 主要数据文件:(扩展名.mdf是 primary data file 的缩写) 主要数据文件包含数据库的启动信息,并指向数据库中的其他文件。...用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。每个数据库有一个主要数据文件。...次要数据文件(扩展名.ndf是Secondary data files的缩写) 次要数据文件是可选的,由用户定义并存储用户数据。...通过将每个文件放在不同的磁盘驱动器上,次要文件可用于将数据分散到多个磁盘上。另外,如果数据库超过了单个 Windows 文件的最大大小,可以使用次要数据文件,这样数据库就能继续增长。

    3.7K20

    第47问:Table definition cache 有什么作用

    client 进行执行: 观察 strace 的输出: 会发现 MySQL 在不停打开 frm 文件,来读取各个表的定义 我们现在调大 TDC的大小,再进行一次实验: 重做试验,我们会发现 strace...没有新的输出:MySQL 不再反复读取 frm 文件 这就是 TDC 的作用:在全局级别建立一个缓存,用于减少读取表定义的成本。...但每次 strace 都会显示 MySQL 访问了500个 frm 文件, 仿佛 TDC 并没有起作用一样。 请大家思考:这个现象是什么原因?...如果我们在MySQL 8.0中,重复以上实验,会发现 MySQL 也不再读取 frm 文件。...这是因为 MySQL 8.0 引入了 Data Dictionary ,将表定义放在了表中,不再需要访问 frm 文件。

    1.3K31

    Java .class文件是什么?

    Java class文件是什么? java class 文件是对Java程序二进制文件格式的精确定义。每一个Java class文件都对一个Java类或者Java接口做出了全面描述。...无论Java class文件在何种系统上产生,无论虚拟机在何种操作系统上运行,对Java class文件的精确定义使得所有Java虚拟机都能够正确地读取和解释所有Java class文件。...Java class文件是八位字节的二进制流。数据项按顺序存储在class文件中,相邻的项之间没有任何间隔,这样可以使得class文件紧凑。...这个特性使得class文件流可以从头到尾被顺序解析,首先读出项的大小,然后读出项的数据。 Class文件的内容是什么?...可以轻松的分辨出Java class文件和非Java class文件,如果一个文件不是以0xCAFEBABE开头,那它肯定不是java class文件。

    3.6K20
    领券