MySQL數(shù)據(jù)表InnoDB引擎表誤刪恢復(fù)(innodb
這世界上有后悔藥 -www.houhuiyao.cc 后悔藥MySQL數(shù)據(jù)恢復(fù) 站長語
MySQL
MySQL支持多種存儲引擎,使用較多的有Innodb引擎和MyISAM引擎。兩種引擎有很大區(qū)別,那么一旦出現(xiàn)數(shù)據(jù)表誤刪,就要針對具體引擎進(jìn)行分析。接下來,研究下數(shù)據(jù)表InnoDB表誤刪恢復(fù)的一些方法。
研究如何恢復(fù)Innodb引擎前,先簡要的介紹下InnoDB,詳細(xì)介紹看MySQL數(shù)據(jù)庫InnoDB數(shù)據(jù)存儲引擎詳細(xì)介紹。
InnoDB,是MySQL的數(shù)據(jù)庫引擎之一,為MySQL AB發(fā)布binary的標(biāo)準(zhǔn)之一。InnoDB由Innobase Oy公司所開發(fā),2006年五月時由甲骨文公司并購。與傳統(tǒng)的ISAM與MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事務(wù)(Transaction)功能,類似于PostgreSQL。
目前InnoDB采用雙軌制授權(quán),一是GPL授權(quán),另一是專有軟件授權(quán)。
中文名 innodb 外文名 innodb
類 型 mysql數(shù)據(jù)庫引擎 開發(fā)公司 Innobase Oy公司
特 色 支持了ACID兼容的事務(wù) 授 權(quán) GPL授權(quán),專有軟件授權(quán)
(MySQL及InnoDB目前均被Oracle公司收購)
在技術(shù)上,InnoDB 是一套放在 MySQL后臺的完整數(shù)據(jù)庫系統(tǒng),InnoDB 在主內(nèi)存中建立其專用的緩沖池用于高速緩沖數(shù)據(jù)和索引。
InnoDB 把數(shù)據(jù)和索引存放在表空間里,可能包含多個文件,這與其它的不一樣,舉例來說,在 MyISAM 中,表被存放在單獨(dú)的文件中。InnoDB 表的大小只受限于操作系統(tǒng)的文件大小,可也可以每個表使用各自獨(dú)立的表空間,只需要啟用選項(xiàng) innodb_file_per_table
這里我們討論的是使用獨(dú)立表空間(innodb_file_per_table=1)情況下的誤刪。(以下操作在測試環(huán)境進(jìn)行,尤其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表和測試數(shù)據(jù)
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表存儲引擎,插入了三條數(shù)據(jù)。
三條數(shù)據(jù)存儲在MySQL里,在磁盤上以文件形式保存,效果如下:
此時表誤刪,類似于使用 rm -f a.*
那么這種情況下對InnoDB表數(shù)據(jù)的恢復(fù),如果有備份,則直接使用備份進(jìn)行恢復(fù);如果開啟了binlog參考mysql恢復(fù)誤刪的數(shù)據(jù)。如果既沒有備份也沒有開啟binlog或者binlog也不全,那要完整恢復(fù)這里誤刪的InnoDB表,實(shí)際上就是對Linux下刪除文件rm -f * 進(jìn)行恢復(fù)。
#使用命令進(jìn)行直接恢復(fù)
#先查看數(shù)據(jù)所在分區(qū)
[root@www ~]# df -h /usr
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 7.9G 8.8G 48% /
其中 /usr是MySQL數(shù)據(jù)所在目錄
#使用工具進(jìn)行恢復(fù)
cd /tmp/
extundelete –restore-all /dev/sda2
#則將在當(dāng)前目錄下生成RECOVERED_FILES目錄,存放全部恢復(fù)出來的物理文件。找到a.frm a.ibd后導(dǎo)入MySQL數(shù)據(jù)庫即可恢復(fù)InnoDB誤刪除的表
下一篇:ora數(shù)據(jù)庫故障修復(fù)