? ? 我們常常聽說某某網(wǎng)站的程序猿又刪庫(kù)跑路了,怎么防止程序猿刪庫(kù)到跑路呢?

? ? 首先我們先了解下數(shù)據(jù)庫(kù)的高可用架構(gòu),現(xiàn)網(wǎng)上我們很少只使用一個(gè)數(shù)據(jù)庫(kù),只有一個(gè)數(shù)據(jù)庫(kù)容易發(fā)生單點(diǎn)故障,如果我們有多個(gè)備庫(kù),在主庫(kù)故障的時(shí)候,可以切換到備庫(kù),那樣子就能夠避免讀取不到數(shù)據(jù)。但是,程序猿把主庫(kù)刪除了,如果是直接登錄到主機(jī)上面刪除數(shù)據(jù),那么不怕,我們還是可以切換到備機(jī),繼續(xù)服務(wù),只有用數(shù)據(jù)庫(kù)命令的刪除(也可以是代碼),命令也會(huì)被同步到備庫(kù),備庫(kù)也會(huì)刪除,這才是真正地刪庫(kù),老板才會(huì)感知到。

? ? 即便我們遇到一個(gè)高級(jí)一點(diǎn)的程序猿,如果他是使用上述第二種方法刪除數(shù)據(jù)庫(kù)的,我們也不怕,怎么處理呢?還好并不是沒有辦法,通常我們DBA每天都會(huì)備份數(shù)據(jù)庫(kù),每天我們都會(huì)把所有數(shù)據(jù)備份一次,另外,每個(gè)數(shù)據(jù)庫(kù)的操作,都會(huì)有binlog,binlog是Mysql sever層維護(hù)的一種二進(jìn)制日志,其主要是用來記錄對(duì)mysql數(shù)據(jù)更新或潛在發(fā)生更新的SQL語(yǔ)句,并以”事務(wù)”的形式保存在磁盤中。我們可以取出昨天的備份,隨后將今天的binlog,除了刪庫(kù)命令之外,進(jìn)行回放binlog,逐個(gè)進(jìn)行恢復(fù)。
? ? 盡管我們能夠取到昨天的數(shù)據(jù),然后回放今天的binlog,但恢復(fù)畢竟要花時(shí)間,在一些公司,通常會(huì)有延遲數(shù)據(jù)庫(kù)這種東西,就是數(shù)據(jù)庫(kù)插入后,會(huì)延遲1小時(shí)再同步到備庫(kù),這樣子,當(dāng)發(fā)生刪庫(kù)的時(shí)候,相比于昨天的備份,數(shù)據(jù)更近更新,可以更快地進(jìn)行回放找到最新地?cái)?shù)據(jù)。這種延遲數(shù)據(jù)庫(kù),我們一般會(huì)提供給大數(shù)據(jù)這種對(duì)數(shù)據(jù)實(shí)時(shí)性要求不高,但有可能有大批量讀取地應(yīng)用使用。也避免了BI突發(fā)的大數(shù)據(jù)讀取造成現(xiàn)網(wǎng)的波動(dòng)。

? ? ? ? 如何防止程序猿刪庫(kù)到跑路呢?我們一般有幾種方法:
? ? 1.限制賬戶權(quán)限,不是隨便人都能執(zhí)行寫權(quán)限。不同的賬戶能操作的數(shù)據(jù)庫(kù)也是有限的,避免一個(gè)賬號(hào)刪除所有庫(kù)。
? ? 2.定期進(jìn)行演練,進(jìn)行數(shù)據(jù)恢復(fù)
? ? ? ? 當(dāng)然,前面兩種方法治標(biāo)不治本,真正防止程序猿刪庫(kù)到跑路最好地方法,只要記住下面口訣:加錢!??!
