MySQL InnoDB引擎独立表空间 表文件误删恢复

mysql | 2020-03-06 16:25:47

MySQL支持多种存储引擎,使用较多的有Innodb引擎和MyISAM引擎。如果误删了数据,那么你可以跑路...,额不对,你可以根据不同的引擎来找不同的数据恢复方法。

肯定的我是误删了数据才来研究,研究下数据表InnoDB表误删恢复的一些方法,而且还是独立表空间的误删研究。


1.什么是 mysql Innodb引擎

InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。

目前InnoDB采用双轨制授权,一是GPL授权,另一是专有软件授权。

(MySQL及InnoDB目前均被Oracle公司收购)


在技术上,InnoDB 是一套放在 MySQL后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。

InnoDB 把数据和索引存放在表空间里,可能包含多个文件,这与其它的不一样,举例来说,在 MyISAM 中,表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小,可也可以每个表使用各自独立的表空间,只需要启用选项 innodb_file_per_table。


这里我们讨论的是使用独立表空间(innodb_file_per_table=1)情况下的误删。


注意:在测试环境下搞,别搞出事情了


2.创建测试表

查看是否独立表空间

mysql> show variables like ‘innodb_file_per_table’;
+———————–+——-+
| Variable_name | Value |
+———————–+——-+
| innodb_file_per_table | ON |
+———————–+——-+
1 row in set (0.03 sec)

创建表



Create Table: CREATE TABLE `a` (
`id` int(11) NOT NULL,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.09 sec)

插入三条数据

| id | name |
+—-+——+
| 11 | d |
| 22 | d |
| 33 | d |

删除表

使用rm -f a.* 删除linux中的表数据文件


3.下载安装文件恢复神器extundelete

参考:linux 文件恢复工具extundelete安装使用


4.恢复表数据

如果开启了binlog请使用binlog的方式来恢复,这里既没有binlog也没有备份

先查看数据所在分区

[root@www ~]# df -h /usr

Filesystem Size Used Avail Use% Mounted on

/dev/sda2 18G 7.9G 8.8G 48% /

其中 /usr是MySQL数据所在目录


先查看数据所在分区

[root@www ~]# df -h /usr
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 7.9G 8.8G 48% /

其中 /usr是MySQL数据所在目录


使用工具进行恢复

cd /tmp/
extundelete –restore-all /dev/sda2

#则将在当前目录下生成RECOVERED_FILES目录,存放全部恢复出来的物理文件。找到a.frm a.ibd后导入MySQL数据库即可恢复InnoDB误删除的表


ok 大工告成!

登录后即可回复 登录 | 注册
    
关注编程学问公众号