关于mysql文件的.frm文件的导入

时间:2022-02-06 20:13:54
前几天我的电脑由于装驱动突然崩溃了,于是就重做系统了。但万万没有想到我的mysql数据库没有导出,好在我的php环境没有装载C盘。由此忙乎了一下午才恢复了表数据结构,但数据始终还是没有恢复。

当重装完系统之后,又重新装了php的运行环境,我用的是wamp环境,首先我把原来的数据库文件夹复制到了新装的的数据库data文件夹下,于是打开phpmyadmin,看到基本数据表都运行正常,但用着用着才发现一个很重要的问题,我的user表不正常了,在插入数据时,所有记录都是空的。这让我很郁闷。于是我到phpmyadmin的sql与语句中去执行,提醒我插入成功,但是记录还是空的,这让我想起了重装系统的问题。于是上网查询,想起来了,我其他的表的是MyISAM引擎,而user表是InnoDB。很可能是这个原因导致的。好废话不多说,直接我的解决办法:
1、把原来的数据库文件夹复制到新的mysql的data的文件夹下。
2、打开phpmyadmin,可以看到原来的数据库,但是看不见InnoDB引擎的user表。查看data文件下有user.frm文件。(不知道什么原因,我不是专门搞数据库)
3、把user.frm文件复制出来一份,放到桌面。
4、然后把data下的user.frm文件删掉。(不删掉没法新建这个表)
5、在phpmyadmin下重新建立一个user表,字段随便取,我就建了一个id字段(没有字段建不了表)。
6、关闭mysql环境,到data文件夹下,把原来复制到桌面的user.frm文件覆盖新产生的user.frm。
7、重启mysql,可以看到原来的user表的结构又恢复了。但是数据没有了。(不知道为什么,我郁闷)。
到了这一步,我以为 万事大吉了,但问题又来了,这个表现在不能插入数据了。尝试很多遍,sql语句没有问题,插入的数据全是空的。
于是我
8、把这个数据库整个导出为sql文件。
9.将整个数据库删掉。
10、新建个数据库,重新导入那个sql文件,这回完全正常了。

我是做php开发的,不是专门搞数据库了,误打误撞把原来的user数据表表结构恢复了,但我不知道原理。终止恢复了数据表结构,但是数据是没有了。记录一下以为以后再出现这中情况好查看,如果有高人还有更好的办法请不忘赐教。本人QQ:123270073

3 个解决方案

#1


MYISAM存储引擎的表是由 *.frm, *.myd, *.myi 组成。

每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。 


所以说MYISAM的表可以通过文件复制直接恢复。
但INNODB存储引擎的表则不同,表结构是 .frm, 但数据是存放在 datadir所对应目录中的 ibdata1文件中。所以仅存在 .frm文件是无法恢复 innodb表的。

#2


innodb的数据是在ibdata1里面存着  你复制了数据库文件夹  里面只有frm这种表结构  所以出现了你的情况

#3


INNODB的表要通过MYSQLDUMP备份,再用MYSQL导入的,直接COPY是不行的

#1


MYISAM存储引擎的表是由 *.frm, *.myd, *.myi 组成。

每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。 


所以说MYISAM的表可以通过文件复制直接恢复。
但INNODB存储引擎的表则不同,表结构是 .frm, 但数据是存放在 datadir所对应目录中的 ibdata1文件中。所以仅存在 .frm文件是无法恢复 innodb表的。

#2


innodb的数据是在ibdata1里面存着  你复制了数据库文件夹  里面只有frm这种表结构  所以出现了你的情况

#3


INNODB的表要通过MYSQLDUMP备份,再用MYSQL导入的,直接COPY是不行的