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
参考:
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 大工告成!