zoukankan      html  css  js  c++  java
  • .frm和.ibd恢复数据

    昨日晚上开发告诉我不小心truncate两个表的数据,要求还原。结果在阿里云上找到了备份内容,结果是物理备份文件.frm、.ibd。心中一万个草泥马啊。。没办法,开始还原吧。

    1、查看测试机Mysql配置文件位置

    [root@localhost mysql]# which mysqld                     
    /usr/sbin/mysqld
    [root@localhost mysql]# /usr/sbin/mysqld --verbose --help|grep -A 1 'Default options'
    Default options are read from the following files in the given order:
    /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 

    可以看到Mysql首先调用的是/etc/my.cnf。查看该文件

    [root@localhost mysql]# cat /etc/my.cnf
    #
    # The Percona Server 5.7 configuration file.
    #
    #
    # * IMPORTANT: Additional settings that can override those from this file!
    #   The files must end with '.cnf', otherwise they'll be ignored.
    #   Please make any edits and changes to the appropriate sectional files
    #   included below.
    #
    !includedir /etc/my.cnf.d/
    !includedir /etc/percona-server.conf.d/

    发现加载的是/etc/my.cnf.d/和/etc/percona-server.conf.d/目录,/etc/my.cnf.d/为空,/etc/percona-server.conf.d/有两个文件。

    终于找到了配置文件/etc/percona-server.conf.d/mysqld.cnf。

    2、进入测试机mysql,创建一个表(表名需要与恢复的表名一致,表结构一致)

    CREATE TABLE `goms_hangar` (
      `hangar_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `airport_iata` char(3) NOT NULL DEFAULT 'KMG' COMMENT '所属机场',
      `hangar_category` varchar(16) NOT NULL DEFAULT '' COMMENT '所属机库分类',
      `hangar_num` varchar(16) NOT NULL DEFAULT '' COMMENT '机库具体编号',
      `arr_fid` char(32) NOT NULL DEFAULT '' COMMENT '进港航班',
      `aircraft_num` varchar(16) NOT NULL DEFAULT '' COMMENT '飞机编号',
      `from_parking_num` varchar(8) NOT NULL DEFAULT '' COMMENT '原机位',
      `in_time` int(11) unsigned NOT NULL COMMENT '进库时间',
      `go_parking_num` varchar(8) NOT NULL DEFAULT '' COMMENT '出库机位',
      `out_time` int(11) unsigned NOT NULL COMMENT '出库时间',
      `uid` int(11) unsigned NOT NULL COMMENT '操作人',
      `is_exists` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否还存在',
      `update_time` int(11) unsigned NOT NULL,
      `create_time` int(11) NOT NULL COMMENT '数据创建时间',
      PRIMARY KEY (`hangar_id`),
      KEY `IDEX_H_CATEGORY` (`hangar_category`),
      KEY `IDX_H_NUM` (`hangar_num`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    3、

    alter table goms_hangar discard tablespace;

    4、将备份的.ibd拷贝到datadir目录下,记得更改权限

    [root@localhost hello]# cp ~/source/goms_hangar.ibd .
    [root@localhost hello]# chown -R mysql:mysql .

    5、在Mysql数据库中输入

    mysql> alter table goms_hangar import tablespace;

    完成恢复。

    6、查看效果

    mysql> select count(*) from goms_hangar;
    +----------+
    | count(*) |
    +----------+
    |      341 |
    +----------+
    1 row in set (0.09 sec)

    附:alter table table_name discard tablespace;alter table goms_hangar import tablespace;

    ALTER TABLE tbl_name DISCARD TABLESPACE;会将当前.ibd文件删除掉

    ALTER TABLE tbl_name IMPORT TABLESPACE;会将文件内容导入到表空间中

     注:如果在ALTER TABLE tbl_name IMPORT TABLESPACE;报如下错误

    则需要在创建表的时候指定表的行格式。即加上ROW_FORMAT=COMPACT

  • 相关阅读:
    List<T> 添加 DataTable
    sql 在not in 子查询有null值情况下经常出现的陷阱
    SQL查询~ 存在一个表而不在另一个表中的数据
    SQL Server xtype
    jQurey 获取当前时间
    sp_rename
    Longest Substring Without Repeating Characters
    Fraction to Recurring Decimal
    链表翻转系列
    蓄水池抽样
  • 原文地址:https://www.cnblogs.com/binbinyouni/p/6297578.html
Copyright © 2011-2022 走看看