注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯的博客

如果你是我眼中的一滴泪,那我永远也不会哭!

 
 
 

日志

 
 
 
 

恢复mysql通过拷贝文件备份数据丢失索引以及INNODB表问题  

2010-12-28 09:38:47|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

假设有个myisam表:tbl,为了备份方便,直接把 frm 和 MYD 文件拷贝到其他目录。在还原时,就需要重新下创建索引,只需要执行以下命令:
mysql> REPAIR TABLE `tbl` USE_FRM;
即可根据 frm 和 MYD 文件,产生一个新的 MYI 索引文件。这在索引文件较大时备份还原比较有用。

 

------------------------------------------------------------------------------------------------------

所谓物理备份,即直接拷贝相关的文件而不是通过mysqldump的方法备份数据库。

还原时将相应的文件拷贝回数据库即可。

基本操作:

cp -r /var/db/mysql5/mydb ~/

之后换台机器再拷贝回去

cp -r mydb /var/db/mysql5/

通过如上的操作对于恢复MYISAM表没有问题,但是想恢复INNODB就危险了,我就遇上数据库中部分INNODB的表全不见了。

分析:

INNODB表的数据是根据配置存放在.ibd文件或者ibdata文件中。主要分为独享表空间和共享表空间的存储方式。使用独享表空间时,文件保存为.ibd,文件存放在数据库目录下(和Myisam一样)。当使用共享表空间时,文件保存在ibdata文件。该文件通过innodb_data_home_dir和innodb_data_file_path两个参数共同配置。如果是只拷贝了数据库目录,而同时innodb的相关文件没拷贝自然就会丢失表了。另外要注意的是即使是独享表空间的方式,也需要拷贝共享表空间配置的相关文件。因为.ibd只是存放表数据,索引数据以及UNDO信息,REDO信息和元数据都是在共享表空间的文件中。

解决:

拷贝所有innodb需要的文件,包括.idb和ibdata以及ib_logfile(用于innodb的日志文件)

 

相关知识:

MyISAM与InnoDB的区别是什么呢?

简单的表达如下:
MyISAM 是非事务的存储引擎。
innodb是支持事务的存储引擎。

两者在文件结构,查询效率,参照完整性支持,等方面都有差异。 MYSQL文档中用了近万字来描述这两个存储引擎。

  评论这张
 
阅读(1918)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017