MySQL数据表InnoDB引擎表误删恢复(innodb
这世界上有后悔药 -www.houhuiyao.cc 后悔药MySQL数据恢复 站长语
MySQL
MySQL支持多种存储引擎,使用较多的有Innodb引擎和MyISAM引擎。两种引擎有很大区别,那么一旦出现数据表误删,就要针对具体引擎进行分析。接下来,研究下数据表InnoDB表误删恢复的一些方法。
研究如何恢复Innodb引擎前,先简要的介绍下InnoDB,详细介绍看MySQL数据库InnoDB数据存储引擎详细介绍。
InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。
目前InnoDB采用双轨制授权,一是GPL授权,另一是专有软件授权。
中文名 innodb 外文名 innodb
类 型 mysql数据库引擎 开发公司 Innobase Oy公司
特 色 支持了ACID兼容的事务 授 权 GPL授权,专有软件授权
(MySQL及InnoDB目前均被Oracle公司收购)
在技术上,InnoDB 是一套放在 MySQL后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
InnoDB 把数据和索引存放在表空间里,可能包含多个文件,这与其它的不一样,举例来说,在 MyISAM 中,表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小,可也可以每个表使用各自独立的表空间,只需要启用选项 innodb_file_per_table
这里我们讨论的是使用独立表空间(innodb_file_per_table=1)情况下的误删。(以下操作在测试环境进行,尤其rm -f命令需要慎重)
mysql> show variables like ‘innodb_file_per_table’;
+———————–+——-+
| Variable_name | Value |
+———————–+——-+
| innodb_file_per_table | ON |
+———————–+——-+
1 row in set (0.03 sec)
建立测试InnoDB表和测试数据
mysql> show create table aG
*************************** 1. row ***************************
Table: a
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)
mysql> select * from a;
+—-+——+
| id | name |
+—-+——+
| 11 | d |
| 22 | d |
| 33 | d |
+—-+——+
3 rows in set (0.07 sec)
可以看到我们的测试表是InnoDB表存储引擎,插入了三条数据。
三条数据存储在MySQL里,在磁盘上以文件形式保存,效果如下:
此时表误删,类似于使用 rm -f a.*
那么这种情况下对InnoDB表数据的恢复,如果有备份,则直接使用备份进行恢复;如果开启了binlog参考mysql恢复误删的数据。如果既没有备份也没有开启binlog或者binlog也不全,那要完整恢复这里误删的InnoDB表,实际上就是对Linux下删除文件rm -f * 进行恢复。
#使用命令进行直接恢复
#先查看数据所在分区
[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误删除的表
下一篇:ora数据库故障修复