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

如何通过直接复制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数据的新数据库中。
如果目标数据库中已经存在含有数据的“ibdata1”等文件,不要用什么mysqldump的话,不知还有没有什么简便方法来合并新旧数据?

时间: 2024-11-07 10:25:08

如何通过直接复制frm文件以实现恢复/复制innodb数据表?的相关文章

mysql5.7 InnoDB数据表空间文件平滑迁移

[ERROR] [FATAL] InnoDB: Tablespace id is 14 in the data dictionary but in file ./mysql/innodb_index_stats.ibd it is 696! --先测试直接把.ibd文件拷贝过去   (这种方法失败,因为tablespace_id不一致) mysqld_safe --defaults-file=/usr/my-new.cnf &    --启库 总结: 对于innodb每个表都有各自的表空间来说,

复制mysql数据表文件MYI,MYD,frm 后问题记录

1 错误提示"ERROR 1036 (HY000): Table is read only",可读不可写. 解决方法: 1 检查复制后的数据文件 所属 用户和用户组 是否为mysql:mysql 2 检查新表数据文件是否缺少 w (写)权限 3 进入mysql 和db 后.执行 flush 命令刷新 ; 2 错误提示"Got error 175 from storage engine" 解决方法: 修复表,产生原因可能时复制过程中的表损伤 >REPAIR TA

pl/sql 如何将Excel文件数据导入oracle的数据表?

1.准备导入数据的excel文件 注意:excel列名和数据表列名必须相同,excel文件sheet2和sheet3可以删除 1)excel文件格式 2)数据表格式 2.打开pl/sql ,找到工具---> ODBC导入器 3.选择excel文件,输入用户/密码 4.点击连接,找到磁盘中要导入的文件 5.选择要导入文件的工作表sheet1 6.切换到转入Oracle,选择要导入oracle的那个表 7.点击导入,执行成功,查看结果 原文地址:https://www.cnblogs.com/xie

MySQL删除ibdata1后,如何通过.frm文件把表结构恢复过来

一.创建一个表test_0  CREATE TABLE `te`.`test_0`(         `id` INT(9) ZEROFILL NOT NULL,       `name` VARCHAR(12),       PRIMARY KEY (`id`)     ) ENGINE=INNODB; 二.把以下3个文件删除掉   文件目录:D:\Program Files\MySQL\MySQL Server 5.5\data 三.重启数据库,再访问test_0时出现以下问题 此时,该表无

MyISAM表的.frm文件丢失后的恢复方法

MyISAM表的.frm文件丢失后的恢复方法: 1.创建实验用的MyISAM表t1,并插入数据: mysql> create table t1(id int) engine=myisam; Query OK, 0 rows affected (0.01 sec) mysql> insert into t1 values(1),(2),(3),(4),(5),(6),(7),(8); Query OK, 8 rows affected (0.00 sec) Records: 8  Duplica

【1.1】mysql frm文件丢失(ibd文件丢失)

[1]故障模拟准备环境 这里以innodb为例 [1.1]配置参数 开启独立表空间 innodb_file_per_table; [1.2]构建测试数据 create database test; create table a(id int,num int); insert into  a values(1,11),(2,12); [2]故障模拟 [2.1]在业务正在运行的情况下,手动删除 test库 下的 a.frm [2.2]删除完之后,会发生什么? 如上图所示可知(在业务还在跑的情况下):

SVN 文件删除及恢复

SVN 文件删除及恢复 在TortoiseSVN管理的项目中删除文件的方法: 1. 在客户端按delete删除(OS中删除,不通过SVN) ● 未提交之前一旦Update则被删除的文件立刻回来. ● 在revert反删除工具中不显示(其实SVN并不知道删除了这个文件). ● 在此状态下提交会提示该文件的状态为missing. ○ 如果勾选missing的文件提交,则删除操作被提交到容器,容器中该文件也被删除. 这时候当然Update也不会回来了,只能从OS中恢复删除. ○ 恢复删除后再次提交,则

rdb文件解析及恢复

参见:rdb_parse rdb文件解析及恢复,布布扣,bubuko.com

通过替换frm文件方式修改表结构

版本:5.6.16 在自己的虚拟环境中,测试创建一个表,表结构如下:mysql> drop table yoon_temp;Query OK, 0 rows affected (0.09 sec) mysql> show create table yoon\G*************************** 1. row ***************************       Table: yoonCreate Table: CREATE TABLE `yoon` (  `i