Chinaunix首页 | 论坛 | 博客
  • 博客访问: 56017
  • 博文数量: 19
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 141
  • 用 户 组: 普通用户
  • 注册时间: 2017-04-01 09:33
文章分类

全部博文(19)

文章存档

2017年(19)

我的朋友

分类: 系统运维

2017-06-01 12:05:47

一次误操作,把ibdata1给覆盖了。网上找到相关资料,特此记录。原文:http://www.cnblogs.com/GmrBrian/p/3963653.html

mysql存储在磁盘中,各种天灾人祸都会导致数据丢失。数据被误删除了,或者ibdata损坏了怎么办呢?别担心,只要有部分的frm、ibd存在就可以恢复部分数据。

注意:
一、这个是对innodb的数据恢复。myisam不需要这么麻烦,只要数据文件存在直接复制过去就可以。
二、大家的mysql数据库必须是按表存放数据的,my.cnf的设置为 innodb_file_per_table = 1。默认不是,如果不是,不好意思,这个方法不能恢复你的数据。

参考 http://blog.chinaunix.net/uid-24111901-id-2627876.html

1、找回表结构,如果表结构没有丢失直接到下一步   (我测试环境有完整的表结构,所以直接跳过了这一步)

      a、先创建一个数据库,这个数据库必须是没有表和任何操作的。


      b、创建一个表结构,和要恢复的表名是一样的。表里的字段无所谓。一定要是innodb引擎的。CREATE TABLE `weibo_qq0`( `weiboid` bigint(20)) ENGINE=InnoDB DEFAULT CHARSET=utf8;


      c、关闭mysql, service mysqld stop;


      d、用需要恢复的frm文件覆盖刚新建的frm文件;

               
               e、再启动数据库,查看报错日志,如果字段不一样,会报错,再根据报错,按提示的,有多少个字段就新建多少字段。

      f、全部建好以后,修改my.cnf 里 innodb_force_recovery=1 , 如果不成修改为 2,3,4,5,6。


            g、 启动mysql,service mysqld start;show create table weibo_qq0 就能li到表结构信息了。

2、找回数据。记得上面把 innodb_force_recovery改掉了,需要注释掉,不然恢复模式不好操作。 这里有个关键的问题,就是innodb里的任何数据操作都是一个日志的记录点。也就是如果我们需要数据恢复,必须把之前的表的数据的日志记录点添加到一致。

      a、建立一个数据库,根据上面导出的创建表的sql执行创建表。


      b、先要把当前数据库的表空间废弃掉,使当前ibd的数据文件和frm分离。可以把ibdata1改个名字相当于备份下。
      c、然后再进入该库执行ALTER TABLE weibo_qq0 DISCARD TABLESPACE;这个时候当前ibd的数据文件和frm分离了,文件夹下ibd物理文件就不在了。
      d、把之前要恢复的 .ibd文件复制到新的表结构文件夹下。
      e、 使当前的ibd 和frm发生关系。ALTER TABLE weibo_qq0 IMPORT TABLESPACE;
      f、这个时候我查询数据就已经可以查出来。现在把数据备份出来,恢复到线上环境就可以了。


阅读(1398) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:linux 文件共享nfs

给主人留下些什么吧!~~