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

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

[root@localhost mysql]# which mysqld
/usr/sbin/mysqld
[root@localhost mysql]# /usr/sbin/mysqld --verbose --help|grep -A '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 '' 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

.frm和.ibd恢复数据的更多相关文章

  1. 利用.frm、.ibd恢复数据

    我们知道启用innodb_file_per_table选项后,单个表(InnoDB引擎)的数据和索引放入单独的文件中(.ibd),建表语句保存在.frm文件中本文假设192.168.85.132,33 ...

  2. Centos7下Mysql通过.frm和.ibd恢复数据

    通过.frm和.ibd文件恢复表结构和数据 这里以hue数据库中的desktop_document2表为例 分成两步骤,先去表结构,再取数据,最好在一个用完就可以删除的数据库中进行 取表结构篇: 1. ...

  3. frm和ibd恢复sql文件的操作

    情况:有mysql中data文件(仅仅一个数据库) 操作:frm和ibd恢复sql文件的操作 1.创建相同名字的库xxx 2.把ibdata1替换成原来的 3.把数据库xxx内内容全部替换为原来的 完 ...

  4. Mysql ibdata 丢失或损坏如何通过frm&ibd 恢复数据

    mysql存储在磁盘中,各种天灾人祸都会导致数据丢失.大公司的时候我们常常需要做好数据冷热备,对于小公司来说要做好所有数据备份需要支出大量的成本,很多公司也是不现实的.万一还没有做好备份,数据被误删除 ...

  5. Mysql 通过frm&ibd 恢复数据

    mysql存储在磁盘中,各种天灾人祸都会导致数据丢失.大公司的时候我们常常需要做好数据冷热备,对于小公司来说要做好所有数据备份需要支出大量的成本,很多公司也是不现实的.万一还没有做好备份,数据被误删除 ...

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

    .frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per_table = 1)产生的存放该表的数据和索 ...

  7. windows mysql5.7 InnoDB 通过frm与ibd对数据进行恢复

    参考:https://www.jianshu.com/p/50a2e13cd5cf 安装MySQL Utilities 下载地址:https://dev.mysql.com/downloads/uti ...

  8. mysql InnoDB通过.frm和.ibd恢复表和数据

    ibdata1是一个用来构建innodb系统表空间的文件,这个文件包含了innodb表的元数据.撤销记录.修改buffer和双写buffer.如果file-per-table选项打开的话,该文件则不一 ...

  9. MySQL 5.6.26 通过frm & ibd 恢复数据过程

    在A服务器上创建数据库yoonroot(yoon)> show create table yoon\G*************************** 1. row *********** ...

随机推荐

  1. wp8使用现有sqlite数据库

    就是把现有文件转移到隔离空间即可 代码如下 private async void CopyDB()        {            StorageFile fage = await Appli ...

  2. algorithm之排序算法--待解决

    简述:排序算法,参见http://www.cplusplus.com/reference/algorithm/?kw=algorithm 待解决问题:各种排序算法的实现 /* template < ...

  3. 关于_T()说明

    #define  _T(X)  L##X _T()是MFC里的宏.VS支持两种编码方式ASCII和Unicode,前者是用单字节编码,只能表示0~255个字符.为了表示各个国家的字符,采用了UNICO ...

  4. OpenCV-Python 霍夫直线检测-HoughLinesP函数参数

    cv2.HoughLines()函数是在二值图像中查找直线,cv2.HoughLinesP()函数可以查找直线段. cv2.HoughLinesP()函数原型: HoughLinesP(image, ...

  5. git branch detached from jb4.2.2_1.0.0-ga

    /*************************************************************************** * git branch detached f ...

  6. FFMPEG(一) 从V4L2捕获摄像头数据

    系列相关博文: FFMPEG(一) 从V4L2捕获摄像头数据 FFMPEG(二) v4l2 数据格式装换 FFMPEG(三) v4l2 数据编码H264 最近在学习FFMPEG,发现网上的很多例子都是 ...

  7. .net Core 2.1 MVC+EF+Redis搭建

    官方学习资料 搭建空MVC框架 1.创建一个空模板 2.创建文件夹 Controllers.Models.Views 3.在Controllers文件夹下创建HomeController.cs 选择C ...

  8. ACM学习历程—FZU2195 检查站点(树形DP || 贪心)

    Description 在山上一共有N个站点需要检查,检查员从山顶出发去各个站点进行检查,各个站点间有且仅有一条通路,检查员下山前往站点时比较轻松,而上山时却需要额外的时间,问最后检查员检查完所有站点 ...

  9. JAVAset容器基本知识

    import java.io.PrintWriter; import java.util.HashSet; import java.util.Scanner; import java.util.Ite ...

  10. 问题7:如何实现用户的历史记录功能(最多n条)

    实例:制作猜字游戏,添加历史记录功能,显示用户最近猜过的数字 解决方案:使用容量为n的队列存储历史记录 使用标准库colections中的deque,一个双端循环队列 程序退出前,可以使用pickle ...