Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29954043
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Mysql/postgreSQL

2010-03-26 22:27:35

使用frm恢复数据表结构

[整理人:遥方 整理时间:2010-3-26]

当我们建立数据表(innodbmyisam)时,会生成相应的(如:MYD,MYI,frm)

 

说明:frmMYIMYD   分别是   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
发现可以查看全部的数据表了而且有数据



阅读(1026) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~