为什么我的mysql数据库里的表只有frm文件

为什么我的mysql数据库里的表只有frm文件,第1张

这是因为你所创建的表类型为Innodb类型吧!Innodb类型数据库文件夹里只存在frm文件。

一般网站的数据库只需要使用MyISAM类型,这样数据库文件夹里一个表就会对应存在两个文件frm和MYD文件。

这两个文件可以批量恢复innoDB表

创建已经丢失的表结构

先要安装 mysql-utilities。

// RedHatyum -y install mysql-server mysql-utilities// Debianapt install mysql-utilities

使用 mysqlfrm 从 frm 文件里面找回建表语句。

// 分析一个 frm 文件生成建表的语句mysqlfrm --diagnostic /var/lib/mysql/test/t1frm// 分析一个目录下的全部frm文件生成建表语句root@username:~# mysqlfrm --diagnostic /var/lib/mysql/my_db/bk/ >createtbsqlroot@username:~# grep "^CREATE TABLE" createtbsql |wc -l124

可以看到一共生成了 124 个建表语句。

有很多时候也可以从其它库里面生成建表语句,如同一个应用的其它数据库或不同的测试环境,采用下面的 mysqldump 生成建表语句:

mysqldump --no-data --compact my_db>createtbsql

登录 MySQL 生成表。

mysql> create database my_db;mysql> use my_dbDatabase changedmysql> source createtbsqlQuery OK, 0 rows affected (007 sec)

导入旧的数据文件

将新建的没有包括数据的 ibd 文件抛弃

root@username:/var/lib/mysql/my_db# ll ibd|wc12411167941root@username:/var/lib/mysql/my_db# mysql -e "show tables from my_db" \| grep -v  Tables_in_my_db  \| while read a; do mysql -e "ALTER TABLE my_db$a DISCARD TABLESPACE"; doneroot@username:/var/lib/mysql/my_db# ll ibd|wcls: cannot access 'ibd': No such file or directory000

可以看到所有的 idb 文件都已经被抛弃了。然后把旧的有数据的 ibd 文件拷贝到这个 my_db 目录下面,别忘了把属主改过来:chown mysql ,再把这些数据文件 import 到数据库中。

root@username:/var/lib/mysql/my_db# mysql -e "show tables from my_db" \| grep -v  Tables_in_my_db  \| while read a; \do mysql -e "ALTER TABLE my_db$a import TABLESPACE"; done

导入完成后检查表

使用 mysqlcheck 对数据库 my_db 下的所有表进行检查:

root@username:/var/lib/mysql/my_db# mysqlcheck -c my_dbmy_dbcdp_backup_point                             OK

所有的表都导入成功。

今天找了个案例,琢磨了半天,才分析大概出来,数据库是frm,myd,myi备份,不会导入mysql,到网上找了些资料,导入成功。

把mysql数据库的frm,myd,myi,文件导到数据的方法

1、最简单就是,直接拷贝到数据库的的data下的数据库文件夹,前提是

mysql的版本一致,字体一致。

此方法简单快捷但不是没个人都能做到。2、就是在本地机器安装mysql数据库转换frm,myd,myi,文件为sql文件:

1、首先安装mysql,最好版本和服务器一致,字体也要一致(不一致导入后有后遗症-乱码)。

2、然后用建库命令

创建新的数据库命令如下:

create

database

name;(创建名为name的数据库呵呵“;”不能少)

然后去你安装的mysql目录下的data文件夹下就有个name文件夹

按照网上的说法,我建立那个名为dbname的数据库时系统就建立了个以数据库名命名的文件夹,这个文件夹位于mysql安装目录下的data文件夹下,我找了半天根本没有,甚至mysql安装目录下根本就没有data这个文件夹,再次google,原来是这样,mysql

安装路径下面有个myini,用记事本打开

查找

datadir,后面有路径,

我的是

c:/programdata/mysql/mysql

server

51/data/)3、把你的frm,myd,myi文件统统考p到data文件夹下。

4、然后在命令提示符下进入到mysql

安装目录的bin目录下

进行导出为sql文件。

mysqldump

-uroot

-p

name

namesql。

(执行,注意:name就是我前面创建的数据库名字。完后你就会在bin目录下发现一个namesql了,怎样,简单吧。但是我在用的时候发现命令提示符下用cd命令已经不能进入bin目录了,甚至不能更改当前目录,不知为何,难道是因为装了mysql?双击mysqldumpexe,cmd窗口一闪而逝,命令没法输入吖,咋办,又得想招,还是用批处理吧,简单省事。在bin目录里建立个txt文件,把上面那条命令复制进去,另存为,保存类型选所有文件,上面的文件名随便取,但是要加上扩展名bat,例如“新建文本文件bat”,保存。双击刚生成的这个bat文件,搞定。(有的同学不会使用cd命令,google一下便知,例如我输入cd

e:\aaa,执行后当前目录就是e:\aaa了))

自己 *** 作的几点体会:

1、mysql数据库最好安装的根目录下这样在命令提示符时省很多事情。

2、sql倒出时最好是一个表一个表的导出

文件名最好为

dataname_tabnamesql,好记便于导入。

而且一个表的导出sql文件小。因为好多数据库限制大小,例如我用的dh的空间限制为10m

,大了的话导入不了(对了导出后大于服务器限制的可以打成zip也可以导入)

以上就是关于为什么我的mysql数据库里的表只有frm文件全部的内容,包括:为什么我的mysql数据库里的表只有frm文件、mysql数据库frm文件和ibd文件可以删除吗、如何将.FRM,MYD,MYI文件转换为.SQL导入数据库中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10049325.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存