如何通过直接复制frm文件以实现恢复/复制innodb数据表?
在MySQL5.0的使用过程中,经常会出现一些莫名奇妙的问题,导致服务无法启动,只好重新安装MySQL,但是这样原来的数据库就会丢失了。
听说MySQL的数据库文件直接复制便可以使用,但是根据查询,那是指原来的一种“MyISAM”类型的表。
我通常都是使用MySQL-Front直接创建表,默认是“InnoDB”类型,这种类型的一个表在磁盘上好像只对应一个“*.frm”文件,不像MyISAM那样还“*.MYD,*.MYI”文件。
MyISAM类型的表我试过,好像直接拷到另一个数据库就可以直接使用,但是InnoDB类型的表却不行。
在网上搜索了很多办法:
一种说同时拷贝“ibdata1”等等文件,但是这样却造成新的数据库无法启动。
一种好像说使用“truncate table 表名”这样的命令来恢复表结构,也不成功
还有说用什么“mysqldump.exe”,但是这种方法的前提好像需要数据库是好的,并且能够正常启动运行,而我现在是数据库坏掉了,只剩下表文件……
被这个问题真是搅的头疼,希望有经验的高手能给出一个彻底的解决方法:
就是,我现在手头上只有InnoDB类型的frm表文件的话,如何能够将表恢复到一个新的数据库中?还有能恢复数据更好了!
大概找到一种解决方法了,就像我问题中提到的网上搜的第一种方法那样: 同时拷贝innodb数据库表“*.frm”文件和innodb数据“ibdata1”文件到合适的位置。启动MySQL的Windows服务,如果不能成功的话,查看data文件夹中有个“*.err”错误日志文件,其中会对启动失败的原因有所描述的。比如我碰到过两种错误原因。 一种是类似这样的错误信息: [code=INIFile]InnoDB: Error: log file .\ib_logfile0 is of different size 0 10485760 bytes InnoDB: than specified in the .cnf file 0 25165824 bytes![/code] 这是因为在mysql配置文件中配置的日志文件大小与实际的不相符。 解决方法是直接删掉旧的“ib_logfile0”等日志文件,重启MySQL后会自动生成新的日志文件的。 另一中则是这样的错误信息 [code=INIFile]InnoDB: Operating system error number 5 in a file operation. InnoDB: The error means mysqld does not have the access rights to InnoDB: the directory. It may also be you have created a subdirectory InnoDB: of the same name as a data file. InnoDB: File name .\ibdata1 InnoDB: File operation call: ‘open‘. InnoDB: Cannot continue operation.[/code] 经检查原来是“ibdata1”文件在复制的过程中不知怎的被加上只读属性了。 解决方法是去掉“ibdata1”文件的只读属性便可。 上面的方法好像只适用于把旧的innodb数据库拷到一个还没有innodb数据的新数据库中。 |
时间: 2024-11-07 10:25:08