db如何快速回滾+恢復(fù),DBA的神技能
技術(shù)人如果經(jīng)常線上操作DB,河邊走久了,難免出現(xiàn)紕漏:
- update錯(cuò)數(shù)據(jù)了
- delete錯(cuò)數(shù)據(jù)了
- drop錯(cuò)數(shù)據(jù)了
咋辦?找DBA恢復(fù)數(shù)據(jù)唄,即使恢復(fù)不了,鍋總得有人背呀。
畫外音:把數(shù)據(jù)全刪了,怎么辦,怎么辦?
零,哪種方案不能實(shí)現(xiàn)數(shù)據(jù)恢復(fù)?
從“從庫”恢復(fù)數(shù)據(jù)。
一般來說數(shù)據(jù)庫集群是主從架構(gòu):
如果人為執(zhí)行了“刪庫”操作,命令會(huì)同步給其他從庫,導(dǎo)致所有庫上的數(shù)據(jù)全被刪除,無法恢復(fù),故這種方案是不行的。
一,如果DBA沒有做功課,最常見的處理方案是什么?
如果沒有做數(shù)據(jù)安全方案,應(yīng)對(duì)“刪庫”最常見的操作是,跑路。刪掉了公司最重要的資產(chǎn),還不快閃。
二,如果DBA日常做了全量備份+增量備份,應(yīng)該怎么處理?
DBA最常見的技能是:全量備份+增量備份。
全量備份:定期(例如一個(gè)月)將庫文件全量備份。
增量備份:定期(例如每天)將binlog增量備份。
如果不小心“刪庫”,可以這么恢復(fù):
(1)將最近一次全量備份的全庫找到,拷貝回來(文件一般比較大),解壓,應(yīng)用;
(2)將最近一次全量備份后,每一天的增量binlog找到,拷貝回來(文件較多),依次重放;
(3)將最近一次增量備份后,到執(zhí)行“刪全庫”之前的binlog找到,重放;
恢復(fù)完畢。
為了保證方案的可靠性,需要定期進(jìn)行演練。
咦,我怎么好像沒聽過DBA定期做過這類演練?
很有可能只是做了理論上的方案,如果真出了問題,效果也只是理論上能恢復(fù)。此時(shí)回歸方案一,跑路。
全量備份+增量備份的恢復(fù)周期也非常長,可能是天級(jí)別。
畫外音:把幾T的數(shù)據(jù)傳輸過來都用了好長時(shí)間。
三,如果DBA做了“1小時(shí)延時(shí)從庫”,應(yīng)該怎么處理?
什么是1小時(shí)延時(shí)從庫?
如上圖所示,增加一個(gè)從庫,這個(gè)從庫不是實(shí)時(shí)與主庫保持同步的,而是每隔1個(gè)小時(shí)同步一次主庫,同步完之后立馬斷開1小時(shí),這個(gè)從庫會(huì)與主庫保持1個(gè)小時(shí)的數(shù)據(jù)差距。
當(dāng)“刪全庫”事故發(fā)生時(shí),如何利用“1小時(shí)延時(shí)從庫”快速恢復(fù)數(shù)據(jù)?
(1)應(yīng)用1小時(shí)延時(shí)從;
(2)將1小時(shí)延時(shí)從最近一次同步時(shí)間到,執(zhí)行“刪全庫”之前的binlog找到,重放
快速恢復(fù)完畢。
這個(gè)方案的優(yōu)點(diǎn)是,能夠快速找回?cái)?shù)據(jù)。潛在不足是,萬一“1小時(shí)延時(shí)從庫”正在連上主庫進(jìn)行同步的一小段時(shí)間內(nèi),發(fā)生了“刪庫”事故,也無法恢復(fù)。
四,如果DBA做了“雙份1小時(shí)延時(shí)從庫”,應(yīng)該怎么處理?
什么是雙份1小時(shí)延時(shí)從?
如上圖所示,兩個(gè)1小時(shí)延時(shí)從庫,它們連主庫同步數(shù)據(jù)的時(shí)間“岔開半小時(shí)”。
這樣,即使一個(gè)延時(shí)從連上主庫進(jìn)行同步的一小段時(shí)間內(nèi),發(fā)生了“刪庫”事故,依然有另一個(gè)延時(shí)從保有半小時(shí)之前的數(shù)據(jù),可以實(shí)施快速恢復(fù)。
這個(gè)方案的優(yōu)點(diǎn)是,沒有萬一,一定能快速恢復(fù)數(shù)據(jù)。潛在的不足是,資源利用率有點(diǎn)低,為了保證數(shù)據(jù)的安全性,多了2臺(tái)延時(shí)從,降低了從庫利用率。
如何提高從庫利用效率?
對(duì)于一些“允許延時(shí)”的業(yè)務(wù),可以使用1小時(shí)延時(shí)從,例如:
(1)運(yùn)營后臺(tái),產(chǎn)品后臺(tái);
(2)BI進(jìn)行數(shù)據(jù)同步;
(3)研發(fā)進(jìn)行數(shù)據(jù)抽樣,調(diào)研;
但需要注意的是,畢竟這是從庫,只能夠提供“只讀”服務(wù)喲。
五,總結(jié)
保證數(shù)據(jù)的安全性是DBA***要?jiǎng)?wù):
(0)理論上可以恢復(fù)+跑路;
(1)全量備份+增量備份+定期演練;
(2)1小時(shí)延時(shí)從庫;
(3)雙份1小時(shí)延時(shí)從庫+提高資源利用率;