久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

【贈(zèng)書(shū) - 數(shù)據(jù)恢復(fù)】無(wú)備份情況下恢復(fù)MySQL誤刪的表

 數(shù)據(jù)和云 2020-07-01


小編寄語(yǔ)

包含兩個(gè)主要的場(chǎng)景:

1、drop table后的恢復(fù)

2,、truncate table后的恢復(fù)

正文:

我們都知道,,MySQL Server都很多存儲(chǔ)引擎,并不是每種都可以進(jìn)行異常情況之下都恢復(fù),,比如drop table/tuncate table/delete table/update table /drop database又或者是ibdata文件損壞之類(lèi)的,。用的最多的就是Myisam和innodb存儲(chǔ)引擎。目前基本上都是5.5+版本了,,我想幾乎沒(méi)有人再去使用Myisam了吧,。我這里所測(cè)試都5.6,5.7版本中默認(rèn)都存儲(chǔ)引擎已經(jīng)是Innodb了,。因此這里我以Innodb引擎為例子進(jìn)行說(shuō)明,。

MySQL drop table

這里我們首先來(lái)測(cè)試innodb_file_per_table為off的情況,即表結(jié)構(gòu)和數(shù)據(jù)存在同一個(gè)文件中,。這里我分別測(cè)試了表存在主鍵和不存在主鍵的情況,,供參考。

innodb_file_per_table參數(shù)為off(有主鍵的情況)

1創(chuàng)建測(cè)試表

2備份表結(jié)構(gòu)

[root@killdb ~]# mysqldump --opt -d -uroot -proger recover test_drop0801 > /tmp/innodb_recovery/recover/test_drop0801.sql

3刪除表

mysql> drop table test_drop0801;

Query OK, 0 rows affected (0.00 sec)

4掃描數(shù)據(jù)文件

5創(chuàng)建用于恢復(fù)的數(shù)據(jù)字典

6查詢(xún)需要恢復(fù)表的信息

7確認(rèn)數(shù)據(jù)page中數(shù)據(jù)是否存在

8抽取page中的數(shù)據(jù)

9加載數(shù)據(jù)到數(shù)據(jù)庫(kù)

我們可以看到,順利完成了drop table的恢復(fù),,而且數(shù)據(jù)完好無(wú)損,。實(shí)際上我這里還同時(shí)測(cè)試了無(wú)主鍵的情況,經(jīng)過(guò)測(cè)試都類(lèi)似,,可以進(jìn)行完美的恢復(fù),。這里不再累述。

MySQL truncate table

首先這里我要利用undrop_for_innodb 這個(gè)開(kāi)源工具包(當(dāng)然需要編譯),目前該工具已經(jīng)在2017年1月宣布閉源了,,而且開(kāi)始收費(fèi),。但是我們?nèi)匀婚_(kāi)源使用之前都開(kāi)源工具包。另外這里可以告訴大家,,不久的將來(lái),,odu 也會(huì)支持MySQL.

如下是我的truncate table 測(cè)試過(guò)程:

1創(chuàng)建測(cè)試表

2備份表結(jié)構(gòu)

[root@killdb innodb_recovery]# mysqldump --opt -d -uroot -proger recover t_enmotech > /tmp/innodb_recovery/recover/t_enmotech.sql

[root@killdb innodb_recovery]#

3truncate table

mysql> truncate table t_enmotech;

Query OK, 0 rows affected (0.00 sec)

4獲取數(shù)據(jù)字典


5掃描邏輯卷

6創(chuàng)建數(shù)據(jù)字典表

該工具包提供的recover_dictionary腳本會(huì)創(chuàng)建一個(gè)test數(shù)據(jù)庫(kù),并創(chuàng)建一些數(shù)據(jù)字典表供恢復(fù)查詢(xún)使用,。同時(shí)也會(huì)在當(dāng)前目錄創(chuàng)建dictionary目錄,,該目錄下會(huì)存放數(shù)據(jù)字典信息。

7查詢(xún)需要恢復(fù)的表的index_id信息

可以看到被truncate的表的index_id 為178,,我們應(yīng)該進(jìn)一步從178 的page中獲取數(shù)據(jù),。

8確認(rèn)數(shù)據(jù)是否存在

9抽取page中的數(shù)據(jù)

抽取數(shù)據(jù)之前,必須提前準(zhǔn)備好表的表結(jié)構(gòu),,由于這里是truncate,,因此表結(jié)構(gòu)是存在的,很容易獲取,。我這里是測(cè)試,,所以之前就備份了結(jié)構(gòu)。

那么如果是drop table 呢,? 實(shí)際上我們也可以通過(guò)該工具來(lái)恢復(fù)表結(jié)構(gòu),。

10加載數(shù)據(jù)到mysql server

11驗(yàn)證數(shù)據(jù)

我們可以看到,被truncate 掉的數(shù)據(jù)被成功恢復(fù)了回來(lái),。

這里我測(cè)試的truncate table的場(chǎng)景,,其實(shí)對(duì)于drop table、delete table 恢復(fù)方法均類(lèi)似(已測(cè)試過(guò)),。另外,,對(duì)于更為嚴(yán)重的drop database 其實(shí)也是可以進(jìn)行恢復(fù)的。

當(dāng)然,,對(duì)于實(shí)際的生產(chǎn)庫(kù)來(lái)講,,數(shù)據(jù)不一定能夠恢復(fù),因?yàn)橛锌赡鼙桓采w而導(dǎo)致數(shù)據(jù)恢復(fù)不全,。MySQL 對(duì)于空間的重用機(jī)制與Oracle 有很大區(qū)別,,對(duì)于Oracle 而言,如果是delete的數(shù)據(jù),還是很難被覆蓋掉的,,對(duì)于drop 和truncate 則領(lǐng)導(dǎo)別論,。然而MySQL則有所不同,MySQL 默認(rèn)會(huì)啟動(dòng)一些purge 進(jìn)程來(lái)進(jìn)行空間重用,,這是MySQL 5.6的情況:

在MySQL 5.7 版本中更為坑爹,,MySQL 默認(rèn)會(huì)啟動(dòng)4個(gè)purge 線(xiàn)程,因此很容易就會(huì)導(dǎo)致空間被重用,,最終導(dǎo)致數(shù)據(jù)無(wú)法恢復(fù),,如下是MySQL 5.7的purge相關(guān)參數(shù):

因此,一旦你遭遇turncate table/drop table/delete /drop database等情況,,建議立刻停止服務(wù)或者停止數(shù)據(jù)庫(kù),,保留現(xiàn)場(chǎng),以防止環(huán)境進(jìn)一步惡化,,最終導(dǎo)致數(shù)據(jù)無(wú)法恢復(fù)的情況出現(xiàn),。

云和恩墨,匯集了國(guó)內(nèi)專(zhuān)業(yè)的Oracle,、MySQL等數(shù)據(jù)恢復(fù)專(zhuān)家,愿為你的數(shù)據(jù)庫(kù)保駕護(hù)航,!了解云和恩墨的數(shù)據(jù)恢復(fù)服務(wù):Recovery

  福利


在本文評(píng)論區(qū)留下你真知灼見(jiàn)/心得體悟,,并在9月27號(hào)中午12點(diǎn)成為點(diǎn)贊數(shù)超過(guò)50前2名,即可獲得《Effective MySQL之備份與恢復(fù)》,!

有你想看的數(shù)據(jù)恢復(fù)

ORA-600 2662 錯(cuò)誤的SCN增進(jìn)應(yīng)對(duì)

一則強(qiáng)行關(guān)庫(kù)引發(fā)的蝴蝶效應(yīng)

AMDU數(shù)據(jù)抽取恢復(fù)

實(shí)例恢復(fù)起點(diǎn)與終點(diǎn)及RBA

如何恢復(fù)意外刪除的數(shù)據(jù)庫(kù)


    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多