MySQL隨機(jī)恢復(fù)的設(shè)計(jì)思路
如果沒有恢復(fù)場景,備份就失去了業(yè)務(wù)價(jià)值,畢竟單純靠業(yè)務(wù)價(jià)值一把尺子就衡量系統(tǒng)建設(shè)其實(shí)是不公平的,但是如果數(shù)據(jù)沒有恢復(fù)成功,備份就失去了任何價(jià)值。
數(shù)據(jù)庫這個(gè)圈子,其實(shí)比較垂直,能叫出名字的就是那么些人,所以數(shù)據(jù)恢復(fù)是一個(gè)很差的標(biāo)簽,而且刪庫跑路也是行不通的。
我們可以以退為進(jìn),把一些工作轉(zhuǎn)變?yōu)橹鲃?dòng)。假設(shè)我有1000臺(tái)數(shù)據(jù)庫實(shí)例,其中從庫和單實(shí)例節(jié)點(diǎn)有500個(gè),那么如何保障這500個(gè)數(shù)據(jù)庫實(shí)例的數(shù)據(jù)可以恢復(fù),在可以恢復(fù)的前提下,如何提高恢復(fù)效率,然后整體上來看,如何綜合提升備份效率,備份任務(wù)調(diào)度,如何通過增量來落實(shí)“一次全量,永遠(yuǎn)增量”的設(shè)計(jì)模式,這些措施都會(huì)有改進(jìn),但是對(duì)于數(shù)據(jù)恢復(fù)效率還是很難保證的。
比如下面的場景:
1)數(shù)據(jù)庫參數(shù)配置不規(guī)范,/etc/my.cnf和/data/mysql_xxx/my.cnf的配置不匹配,導(dǎo)致實(shí)例啟動(dòng)失敗
2)數(shù)據(jù)庫版本差異化,比如主流支持是5.7,突然冒出來一個(gè)5.6的版本
3)binlog解析出錯(cuò),導(dǎo)致后續(xù)恢復(fù)失敗
4)備份集恢復(fù)出錯(cuò),導(dǎo)致整體恢復(fù)失敗
如此種種的案例數(shù)不勝數(shù),稍有不慎,就難以恢復(fù),而像配置類的問題,雖然可以解決,但是在緊急情況下,恢復(fù)流程失敗,很難保證有良好的心態(tài)能夠快速解決,所以對(duì)于恢復(fù)質(zhì)量的檢驗(yàn)是過去我們一直在犯的錯(cuò)誤:我們一直在完善備份,但是對(duì)于恢復(fù)側(cè)卻少有關(guān)注,認(rèn)為應(yīng)該是可以的,恰恰是這個(gè)應(yīng)該會(huì)把我們拖入被動(dòng)局面。
所以我冒出來一個(gè)隨機(jī)恢復(fù)的想法,還是假設(shè)有500個(gè)實(shí)例,那么這些實(shí)例如果我們一一恢復(fù),每天的工作量是很龐大的,而且對(duì)系統(tǒng)的負(fù)載也很高,所以如果我們把風(fēng)險(xiǎn)和成本做一個(gè)綜合,這個(gè)工作的效率和意義就會(huì)很明顯。
目前的恢復(fù)主要有基于備份集恢復(fù),基于時(shí)間點(diǎn)恢復(fù),對(duì)象粒度的恢復(fù)和表結(jié)構(gòu)恢復(fù),我們通常所說的系統(tǒng)層恢復(fù)主要是基于備份集恢復(fù)和基于時(shí)間點(diǎn)恢復(fù)。
為此我設(shè)計(jì)和實(shí)現(xiàn)了如下的基本流程:
需要補(bǔ)充的是,隨機(jī)時(shí)間是在備份集的時(shí)間周期內(nèi),而隨機(jī)時(shí)間戳,則是按照近24小時(shí)內(nèi)的一個(gè)隨機(jī)時(shí)間點(diǎn)。
所以多次隨機(jī),能夠讓這個(gè)事情的判斷會(huì)更加明確,恢復(fù)質(zhì)量一目了然。
在這個(gè)基礎(chǔ)上還需要一系列的事情:
1)隨機(jī)需要保證在一定的時(shí)間范圍內(nèi),所有實(shí)例都能夠覆蓋到
2)對(duì)恢復(fù)機(jī)進(jìn)行線性擴(kuò)展,比如提供一個(gè)恢復(fù)服務(wù)器組,可以在上面并行的跑一些恢復(fù)任務(wù),提高恢復(fù)響應(yīng)效率
3)對(duì)恢復(fù)結(jié)果進(jìn)行日?qǐng)?bào)可視化,恢復(fù)了哪些,效率如何,對(duì)一定時(shí)間周期內(nèi)的恢復(fù)結(jié)果進(jìn)行匯總和復(fù)盤
4)根據(jù)推斷統(tǒng)計(jì)的思維,采取一定樣本的數(shù)據(jù),通過假設(shè)檢驗(yàn),建立相應(yīng)的數(shù)據(jù)模型來進(jìn)行檢驗(yàn)和分析
本文轉(zhuǎn)載自微信公眾號(hào)「楊建榮的學(xué)習(xí)筆記」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系楊建榮的學(xué)習(xí)筆記公眾號(hào)。