全部博文(2065)
分类: Mysql/postgreSQL
2010-03-26 22:27:35
使用frm恢复数据表结构
[整理人:遥方 整理时间:
当我们建立数据表(innodb或myisam)时,会生成相应的(如:MYD,MYI,frm)。
说明:frm、MYI、MYD 分别是 MyISAM 表的表结构\索引\数据文件
1:恢复innodb类型数据表结构
步骤:
第一步:创建自己的数据库create database test;
Use test;
Create table innodb(id int not
null,name char(20)) ENGINE = innodb;
这个就是我们的目标数据库表了。
观察发现了此目录中会有一个innodb.frm 保存的就是它的表结构
第二步:创建我们的要复制过去的新数据库create databse innodb;
Use innodb;
第三步:将test里面的innodb.frm 拷过去
第四步:show tables 发现有了innodb表了
但是desc innodb的时候报错:Table 'innodb.innodb' doesn't exist
解决办法:
第五步:创建一个新库tmp
Create database tmp
然后创建表create table innodb(id int not null) engine=innodb;
然后将innodb.frm 拷过去到tmp目录下面。
再use tmp
Desc innodb;
OK了!
结论:新库里面必须要有一个同名的表。然后就可以将我们的目标表的结构文件FRM文件拷过来之后就可以直接得到其表结构了!如果你直接复制的话不行!必须是你先自己手工创建同名的表出来然后再覆盖掉!
2:恢复myisam类型数据表结构
目标库test 我们先创建我们的表:
Create table test(a char(5),b
char(5)) engine=myisam;
之后再创建我们要导入过去的库tmp create
database tmp
然后将test.frm拷到tmp目录下面去。
然后再use tmp
Desc test;
发现报:Table tmp.test' doesn't exist
解决办法:
在tmp目录下面创建两个文件test.MYI test.MYD
然后输入:repair table test
use_frm; //修复表的方法
OK搞定!
专题:对于 MyISAM引擎的数据表如何备份数据
1.将数据库tmp目录 即/www/mysql/data/tmp 下面的全部文件像什么.frm .MYI .MYD
事先copy 到一个目录像/www/copy 目录下面。
2.重装MYSQL数据库
3.恢复数据库
创建数据库create database tmp
然后将里面的/www/copy/* 即将全部的.frm .MYI .MYD 复制到现在的数据库目录下面去。
这里面:记住要给这些数据文件赋上正确的权限:
chown -R mysql tmp/.
chgrp -R mysql .
赋上权限之后查看一下ll 一下发现权限赋成功!
4.再次进入数据库use tmp
发现可以查看全部的数据表了而且有数据