推荐给好友 上一篇 | 下一篇

通过直接复制frm文件以实现恢复/复制innodb数据表

BSD爱好者乐园cY&ky\"s#X1Z

在Mysql5.0的使用过程中,经常会出现一些莫名奇妙的问题,导致服务无法启动,只好重新安装MySQL,但是这样原来的数据库就会丢失了。
w0E ]Q2c8Gd uz|3v{.@&D听说MySQL的数据库文件直接复制便可以使用,但是根据查询,那是指原来的一种“MyISAM”类型的表。
u}]j$`^%{我通常都是使用MySQL-Front直接创建表,默认是“InnoDB”类型,这种类型的一个表在磁盘上好像只对应一个“*.frm”文件,不像MyISAM那样还“*.MYD,*.MYI”文件。BSD爱好者乐园/jhD-O f6T
MyISAM类型的表我试过,好像直接拷到另一个数据库就可以直接使用,但是InnoDB类型的表却不行。
0A+]:ZIR在网上搜索了很多办法:BSD爱好者乐园"WFI4BQ
一种说同时拷贝“ibdata1”等等文件,但是这样却造成新的数据库无法启动。
4zFq j'@2BI一种好像说使用“truncate table 表名”这样的命令来恢复表结构,也不成功
q:Q-U \P1x.d还有说用什么“mySQLdump.exe”,但是这种方法的前提好像需要数据库是好的,并且能够正常启动运行,而我现在是数据库坏掉了,只剩下表文件……BSD爱好者乐园-aen/|^0B9s

BSD爱好者乐园RFn0hw(W*q

被这个问题真是搅的头疼,希望有经验的高手能给出一个彻底的解决方法:BSD爱好者乐园 l^.g]Fw3X1BX
就是,我现在手头上只有InnoDB类型的frm表文件的话,如何能够将表恢复到一个新的数据库中?还有能恢复数据更好了!
[KLs2CpY(d
,N$fr/T @1C)j0|
;b sV X1p{_ Y  
%?{E7EU!IgQ   编程论坛 1 个网友回答:
/?j(^o-~J9tgU;k我以前MySQL坏了,重新安装之后,发现所有旧数据库都没有丢失阿,都可以用呢
8H]D0u,_f5a w应该只有Mysql中的mySQL数据库被重新覆盖了BSD爱好者乐园]`)zs(~C*Z|

kv!w%T!J-S8t5S w%v A
3i4llQ;z7Z+oH0L  BSD爱好者乐园p4d1|j5I
   编程论坛 2 个网友回答:
%CQ:O7P@把DATA目录下的Mysql目录改名,然后重新安装MYSQL。BSD爱好者乐园-M)B3h fR1Hi+VI

;o}$gm\"f&n.?之后你就知道怎么做了。BSD爱好者乐园X*ro0e7Yg J6|,R

UAH;kh]$sF.M  
.b T(o+upH4b!O   编程论坛 3 个网友回答:
(r%v"[8` X%[ W把重新安装的新Data文件夹删除掉BSD爱好者乐园8U I7]!?/H#l-U ?
之后再把原来的Data文件夹名改回来
:]/])fM:P{6P呵呵,没试过,应该可行BSD爱好者乐园d8Tx"bi#\#W

.Cg%T)j&MO/nQ/[Zg  
Q:p9h[{}'Y6|4`   编程论坛 4 个网友回答:BSD爱好者乐园3],uN5u'k8a9q
谢谢各位回复。
cc4t-F-xA+I大概找到一种解决方法了,就像我问题中提到的网上搜的第一种方法那样:
.B!Vsb,_R同时拷贝innodb数据库表“*.frm”文件和innodb数据“ibdata1”文件到合适的位置。启动MySQL的Windows服务,如果不能成功的话,查看data文件夹中有个“*.err”错误日志文件,其中会对启动失败的原因有所描述的。比如我碰到过两种错误原因。
+R8Bl Ut6m1GI一种是类似这样的错误信息:

B$N-GF0DN0q#xBSD爱好者乐园;{3STL&Zi

INIFile codeBSD爱好者乐园XL^ wx.z2ty2|M
InnoDB: Error: log file .\ib_logfile0 is of different size 0 10485760 bytesBSD爱好者乐园vy*z}&a
InnoDB: than specified in the .cnf file 0 25165824 bytes!

2o"y:b4\X!J/D7j

(S G6S!D"_&Y8O这是因为在mySQL配置文件中配置的日志文件大小与实际的不相符。BSD爱好者乐园!~oT Z N j/I
解决方法是直接删掉旧的“ib_logfile0”等日志文件,重启MySQL后会自动生成新的日志文件的。BSD爱好者乐园N,A1f iO8T;{!V
另一中则是这样的错误信息BSD爱好者乐园*D~7?%A5~p+H!B%u

BSD爱好者乐园_EI t!I4r]

INIFile codeBSD爱好者乐园'X;Dx&z0Gpel(_
InnoDB: Operating system error number 5 in a file operation.
8~7q\"F3f.tInnoDB: The error means mySQLd does not have the Access rights toBSD爱好者乐园8Zn;K/hi
InnoDB: the directory. IT may also be you have created a subdirectoryBSD爱好者乐园5X.`.i#Uw:gJ._
InnoDB: of the same name as a data file.BSD爱好者乐园 W)wd9d'k
InnoDB: File name .\ibdata1BSD爱好者乐园3QlzRozV%T-fgo
InnoDB: File operation call: 'open'.BSD爱好者乐园I|*zMV9F
InnoDB: Cannot continue operation.

EC:^zuL*L'g{"c*jp

+N]T3R-M3D:i6?经检查原来是“ibdata1”文件在复制的过程中不知怎的被加上只读属性了。
?,q7c}'d:Uw+Q解决方法是去掉“ibdata1”文件的只读属性便可。BSD爱好者乐园 C\?i]*Yr f

#S:T!|y v V上面的方法好像只适用于把旧的innodb数据库拷到一个还没有innodb数据的新数据库中。
4`{*OW'N!DZ7|B q如果目标数据库中已经存在含有数据的“ibdata1”等文件,不要用什么mySQLdump的话,不知还有没有什么简便方法来合并新旧数据?
v&Ul!H kt'h4l@V
$C'Eu]&y.Y%t6[I  
S3t:[.TJ   编程论坛 5 个网友回答:BSD爱好者乐园tu J`%O`T1Z3TX
之前做好备份比啥都强
1D1V#`0^d DBSD爱好者乐园1DnB[ }0hIWpV
  
o"ab2]*fY.B   编程论坛 6 个网友回答:BSD爱好者乐园2s3e&DYHMA o
先留着你的 frm 文件不要动.在新的mysql里建一个数据库,然后分别手工建立你要的那些表,结构随便弄.这样在 Mysql\data文件夹就有了一堆和你手头保存的frm对应文件.把你保留的文件覆盖这些新的frm 重启 mySQL 服务 这样你保留的数据库结构就出来了.只有数据结构没有数据.

wv&i @7y
[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
TAG: InnoDB Innodb mysql MYSQL MySQL Mysql 备份 恢复 innodb
 

评分:0

我来说两句

seccode