
这是因为你所创建的表类型为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导入数据库中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)