• 通过.ibd和.frm恢复mysql数据


    背景:因为机器损坏,数据库的索引文件什么的都损坏了。只留下了一个mysql的data目录…

    此方法恢复数据的前提:建表用的innodb索引
     
    备注:如果mysql的目录还都在,可以先尝试,将mysql下的目录都拷贝到一个新mysql目录下,启动看看能不能用,不能用后再尝试下面方法
     
    mysql会有一个data目录存储表结构和表数据。下面的目录结构大概如下:
    ib_logfile0
    ib_logfile1
    ibdata1
    ibtmp1
    xx数据库1
    xx数据库2
     
    每个数据库目录下面的表内容如下:
    表1.frm
    表1.ibd
    表2.frm
    表2.ibd
    .frm文件:表结构文件
    .ibd文件:表数据文件
     

    下面为恢复数据方法

    备注:这里假设要备注的库名为db1,表名为table1

    1、先备份要恢复数据的表文件

    table1.frm和table1.ibd文件
     
    可以直接把原数据库的data目录整个拷贝过来,如果指定了data目录可以通过查看mysql的进程看到具体配置位置

    2、新搭建一个mysql

    我用的5.7,搭建在mac本地

    3、将mysql下的log文件删除,不要保留和要备份的库相同的内容

    如果你是完全新建的一个数据库,和原来的库表完全无关,可以忽略这步骤
     
    rm -rf /usr/local/mysql/data/ib_logfile0
    rm -rf /usr/local/mysql/data/ib_logfile1
    rm -rf /usr/local/mysql/data/ibdata1
    rm -rf /usr/local/mysql/data/btmp1
    rm -rf /usr/local/mysql/data/db1

    4、新建数据库

    链接上mysql命令行
    create database db1;
     

    5、通过命令行新建原来的表,

    注意,一定在建表命令后加【ROW_FORMAT=COMPACT】防止冲突

    例如:
    DROP TABLE IF EXISTS `table1`;
    CREATE TABLE `table1` (
      `name` varchar(200) NOT NULL DEFAULT '' COMMENT 'key值',
      `value` varchar(500) DEFAULT NULL COMMENT 'value值',
      `desc` varchar(500) DEFAULT NULL COMMENT '关于当前key的描述信息',
      PRIMARY KEY (`name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
    
     
    如果不记得表结构了,可以先参考下面的文章找回表结构,dump出sql结构后获得创建表的语句:

    6、将新建的表DISCARD掉

    命令行执行:
    ALTER TABLE table1 DISCARD TABLESPACE;

    7、将备份的源表数据文件.ibd拷贝过来

    将.ibd文件放到新数据库的data目录下,覆盖刚创建表时新生成的.ibd文件
     
    即/usr/local/mysql/data/db1/下

    8、将拷贝过来的.ibd表数据导入进来

    ALTER TABLE  `table1` IMPORT TABLESPACE;
     
    然后数据就恢复啦~~
     
     
  • 相关阅读:
    Windows7与Window2008 64位IIS7上面DCOM配置Excel、Word
    C#连接SQLite的...方法
    VS2010版快捷键
    ajax 安装包下载
    Type InvokeMember()用法简介
    Lambda表达式
    多源最短路径算法
    单源点有权图的最短路径算法
    单源无权图的最短路径算法
    Tree Traversals Again
  • 原文地址:https://www.cnblogs.com/meitian/p/9886654.html
Copyright © 2020-2023  润新知