mysql frm怎么通过frm和ibd文件还原数据

Mysql――Innodb和Myisam概念与数据恢复
  nodb和Myisam是Mysql常见的两种数据存储引擎。没有研究过Oracle、SQL Server等数据库,所以下面只针对Mysql。
  一、两种方式的数据存储结构:
  在Myisam下,数据库的每个数据表都有*.frm、*.YMI和*.YMD三个文件,其中*.frm存储数据表的表结构,*.MYI存储数据表的索引,*.MYD存数数据表的记录数据;
  在Innodb下,每个数据库下的每个数据表只有一个*.frm存储数据表的表结构,而所有数据库的所有表数据索引、数据记录都全部存储在ibdata1文件中,而ib_logfile0和ib_logfile1是日志文件。
  二、数据导入和恢复:
  Case1 Myisam =》 Myisam:
  由于Myisam的数据表结构、索引、记录数据等信息分别存储在*.frm、*.MYI和*.MYD文件中,所以只需要将源数据库数据表的相应三个文件复制到对应目的数据库文件夹下就可以了。
  但是如果只有*.frm(假设test.frm)了,那么可以将test.frm复制到对应的数据库目录(假设tmp数据库)之后,在tmp目录下,新建test.MYI和test.MYD文件。此时通过“”可以看到有test表,但是查看表的数据,如“”,此时报错无法查看,因为只有test.frm有数据,而test.MYI和test.MYD是新建的无效文件。然后可以通过Mysql自带修复操作“REPAIRTABLE test USE_FRM”修复数据表,然后就可以查看表的数据,但是为空(因为test.frm中不包含数据)。
  Case2 Innodb =》 Innodb:
  由于Innodb下,表结构存在*.frm文件,但是表的数据存储在ibdata1文件中,所以导入时,除了复制*.frm,还要复制源Mysql的data目录下的ibdata1,替换掉目的数据库的ibdata,如果目的数据库中有已存在的其他数据库,此时需要先备份目的数据库的原先data数据,然后将新导入的表格通过其他方式导出,然后在还原原先的data数据,将新导出的数据导入。
  如果只有*.frm(假设test.frm),没有有效的ibdata1,那么也只能恢复表的结构。先将test.frm复制到另一个数据库中(假设tmp),然后在tmp下新建一个Innodb型的数据表test(有哪些字段不重要),不要添加任何记录。然后将要恢复的test.frm复制到test目录下替代新建test表产生的test.frm,重启mysql之后,新建的test表的结构就和要恢复的test表结构相同
  Case3 Myisam =》 Innodb 和 Innodb =》 Myisam:
  如果有*.frm、*.MYI和*.MYD三个文件,可以通过Case1的方法导入之后,重新导出sql或者其他文件,也可以导入后修改为Innodb,之后通过Case2方式。同样Innodb =》 Myisam的操作类似。
  对于数据库的数据,除了从.frm文件恢复之外,如果有日志文件,从日志文件恢复也是一个一个选择。但是对于数据库,进行移植或这更换系统时,最好还是通过导入导出工具到处相应的sql语句文件。
  三、Innodb和Myisam其他区别:
  1、Myisam多个数据库和数据表的记录数据是分文件存储的,而Innodb所有表的记录数据都存储在ibdata1文件中,所以当数据表记录比较少,单个表的数据文件比较少时,此时使用Myisam性能会略好于Innodb。但是如果表的数据记录非常多,此时使用Innodb的性能会远远高于Myisam,通过测试可以发现,随着表的记录增加,Innodb的性能降低很少,而Myisam的性能则迅速降低。
  2、Innodb支持事务操作,而Myisam不支持事务操作。
  事务操作:就是一组多条sql指令作为一个整体,可以并发操作,但是关键点在于事务内的多个操作必须同时执行完才会提交结果。所以事务内的SQL要么都不做,要么都做。
  事务实现一般有下面两种方式:
  Way1 begin、rollback和commit:
  begin表示开始事务,rollback表示事务回滚,commit表示事务提交。
  Way2 通过set来改变Mysql默认的自动提交模式:
  set autocommit=0 禁止自动提交(使用事务,此时每条SQL都会当作事务,必须显示使用commit体提交结果或者rollback撤销结果)
  set autocommit=1 开启自动提交(禁用事务)
  原文地址:/DwyaneTalk/p/4113829.html
  本文来源:博客园  作者:DwyaneTalk
阅读:394次
推荐阅读:
联系我们:
电话:400-
邮编:210014 & & & &官方微博:/njcstor & & &&微信公众号:cStor_cn
地址:南京市白下高新技术产业园中国云计算创新基地A栋9层
(在地图软件上搜“”即可)
版权所有 & 2015
南京云创存储科技有限公司, 保留一切权利。&&
云创存储-领先的、云计算产品供应商mysql的inndb服务器宕机数据还原:使用ibdata1及数据库文件夹(*.frm,*.ibd)还原数据 - 牛儿吃草的博客
- 博客频道 - CSDN.NET
你可能试过innodb_force_recovery等方法,但是启动mysql时还失败。这可能需要完整的binlog日志吧。一旦日志损坏则无法完成还原。
本还原方法要求用户在/f中配置innodb_file_per_table=1,才行。如果没有配置不能保证还原成功,因为只有配置了在数据库文件夹里才会显示*.ibd文件。
我们希望将主机A的mysql服务由主机B接管,所以要求主机B与主机A的/f基本配置相同(尤其是innodb_buffer_pool_size、default-storage-engine、innodb)。
主机A:mysql宕机(内存过小、突然关机等、硬盘空间满)造成mysql无法正常启动。
主机B: 与主机A配置相同的机器。
#由于硬盘太小,所以备份所需要文件之前后添加一个卷。
#备份到主机A的ibdata和希望还原的数据库文件夹到/bak/目录下。
cp -r /var/lib/mysql/ibdata1 /bak/
#yum install -y mysql-server& //注意/f配置与主机A的/f基本配置相同(尤其是innodb_buffer_pool_size、default-storage-engine、innodb)。
#service mysqld start&&&& [ok]&&& //此步是为了初始化mysql服务器。
Initializing MySQL database:& Installing MySQL system tables...
#service mysqld stop && &&& &&& &//为了拷贝主机A的备份数据做准备
#拷贝主机A的/bak/*到主机B的/var/lib/mysql/目录下。提示是否覆盖ibdata时,确认覆盖。
#修改拷贝文件的权限:
chmod -R 777 数据库名/
chown -R mysql:mysql 数据库名/
#service mysqld start&&&& [ok]&&&& //还原数据完成,以下测试数据库。
#mysql -uroot -p&& &&& &&& &&&&
有问题可以留言,随时交流。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:428960次
积分:8891
积分:8891
排名:第819名
原创:436篇
转载:153篇
评论:60条
阅读:1456
文章:10篇
阅读:5641
(8)(6)(5)(5)(2)(2)(10)(4)(13)(36)(20)(4)(7)(9)(14)(3)(29)(36)(38)(5)(10)(5)(33)(69)(5)(22)(71)(29)(20)(38)(11)(20)使用ibdata和frm文件恢复MySQL数据库恢复,文件,用,mysql,frm,恢复数据库,数据库..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
使用ibdata和frm文件恢复MySQL数据库
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口}

我要回帖

更多关于 mysql 只有frm文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信