陳瑋瑋
摘 要:數(shù)據(jù)庫備份是數(shù)據(jù)庫運維工作中一項重要的工作,關(guān)系著系統(tǒng)安全,業(yè)務(wù)穩(wěn)定。文章查閱了行業(yè)內(nèi)的數(shù)據(jù)庫備份的方法,面向校園應(yīng)用這一應(yīng)用場景,提出了新的解決方案,介紹了相關(guān)實現(xiàn)。
關(guān)鍵詞:數(shù)據(jù)庫備份;運維;校園信息化
中圖分類號:G250.74 文獻(xiàn)標(biāo)志碼:A 文章編號:2095-2945(2017)30-0195-02
1 現(xiàn)狀描述
大學(xué)校園中的軟件系統(tǒng),以上海立信會計金融學(xué)院為例,主要是面向院系、部門的業(yè)務(wù)系統(tǒng),關(guān)系著校園的正常運行。各個系統(tǒng)所產(chǎn)生的數(shù)據(jù),大多都存儲于各系統(tǒng)的數(shù)據(jù)庫中。這些數(shù)據(jù)庫多是關(guān)系型數(shù)據(jù)庫,多數(shù)沒有做數(shù)據(jù)安全方面的備份。校園業(yè)務(wù)系統(tǒng)在建設(shè)時,并沒有完整的數(shù)據(jù)備份策略,一旦發(fā)生系統(tǒng)故障,數(shù)據(jù)丟失后難以恢復(fù)。面對著硬件故障、病毒入侵、人為誤操作、停電等多種可能導(dǎo)致數(shù)據(jù)丟失的問題,我校信息辦著手統(tǒng)一的問題解決方法。面對數(shù)量繁多、類型多樣的數(shù)據(jù)庫,力爭以通用的方案,獲取基本的數(shù)據(jù)安全保證。
2 基本解決方法
面對缺乏數(shù)據(jù)備份的眾多數(shù)據(jù)庫,我們希望在發(fā)生數(shù)據(jù)丟失時,能夠從使用日常備份中恢復(fù)數(shù)據(jù),最大限度減少損失。故障恢復(fù)流程,時間希望能夠控制在小時之內(nèi),對于校園應(yīng)用系統(tǒng)這是能夠接受的。
我們研究了多種數(shù)據(jù)庫備份的方法, 在本篇中由于業(yè)務(wù)需求,我們關(guān)注了目前的幾種主流的備份方式,這些備份方法主要工作在四個層面上:
(1)文件層:將數(shù)據(jù)庫導(dǎo)出成文件格式,之后再圍繞文件來做備份。如文獻(xiàn)[1][2][3]都通過遠(yuǎn)程數(shù)據(jù)傳輸軟件來實現(xiàn)備份文件格式數(shù)據(jù)的遷移匯總。這種類型的備份方法通過使用數(shù)據(jù)庫工具定時導(dǎo)出數(shù)據(jù)(Oracle的Rman、MS SQL Server的數(shù)據(jù)庫作業(yè))來實現(xiàn)數(shù)據(jù)庫的導(dǎo)出,再使用文件同步工具如Rsync將數(shù)據(jù)庫數(shù)據(jù)文件、日志文件等同步到備份服務(wù)器。這種方法部署、實現(xiàn)簡單,可快速實現(xiàn)數(shù)據(jù)的備份。
(2)應(yīng)用層數(shù)據(jù)備份:通過數(shù)據(jù)庫備份工具來完成數(shù)據(jù)庫的備份[4][5]。這類備份軟件如開源數(shù)據(jù)備份軟件BackupPC、Amanda、Bacula等。其中BackupPC具有B/S架構(gòu),備份數(shù)據(jù)方式靈活、支持重復(fù)數(shù)據(jù)刪除功能等特點[5]。文獻(xiàn)[4]表明開源軟件Amanda完全能夠滿足GB級的數(shù)據(jù)備份需求,但系統(tǒng)不夠輕量化。
(3)虛擬機層數(shù)據(jù)備份:通過備份虛擬機的同時、實現(xiàn)對虛擬機上數(shù)據(jù)庫的備份。這類方法都在虛擬機管理平臺實現(xiàn),其特點是操作簡單,容易恢復(fù),快速切換。但同時代價也是明顯的:操作系統(tǒng)及數(shù)據(jù)庫軟件等軟件占據(jù)很大比例的虛擬服務(wù)器磁盤。因此備份的磁盤使用率較低,而不同備份之間的差異較小,備份時更加增加了存儲空間、網(wǎng)絡(luò)的消耗。若是使用增量備份,如快照等,又會存在恢復(fù)困難甚至可能難以恢復(fù)。
(4)數(shù)據(jù)層數(shù)據(jù)備份:通過云平臺遠(yuǎn)程備份數(shù)據(jù)庫。文獻(xiàn)[6]使用了AWS這一存儲平臺來存儲數(shù)據(jù)。但校園應(yīng)用系統(tǒng)如一卡通系統(tǒng)、學(xué)生信息系統(tǒng)中有很多隱私信息,將數(shù)據(jù)存放于云端,信息安全可能成為隱患。
對比不同類別的備份系統(tǒng)之后,我們決定在數(shù)據(jù)層進(jìn)行數(shù)據(jù)備份的開發(fā)。通過各類數(shù)據(jù)庫接口直接讀取數(shù)據(jù)庫中的數(shù)據(jù),定期將數(shù)據(jù)庫中的數(shù)據(jù)保存為格式化的文件格式,用以恢復(fù)。在系統(tǒng)設(shè)計時,就注意操作簡單,易于配置,便于管理等特點。
3 創(chuàng)造性地實現(xiàn)數(shù)據(jù)備份
面對運行于不同平臺、類型眾多的數(shù)據(jù)庫,統(tǒng)一而通用的備份方式是最佳選擇。因此,我們提出的使用眾多SQL/NoSQL數(shù)據(jù)庫接口直接備份數(shù)據(jù)的方案。這種備份方法具有部署簡單、備份運行穩(wěn)定、恢復(fù)快速等優(yōu)點。其結(jié)構(gòu)如圖1所示。
數(shù)據(jù)庫備份系統(tǒng)采用Python語言開發(fā),在讀取數(shù)據(jù)庫配置之后,通過Python的眾多數(shù)據(jù)庫API實現(xiàn)對不同數(shù)據(jù)庫數(shù)據(jù)的直接讀取。讀取數(shù)據(jù)庫服務(wù)器中的數(shù)據(jù)庫列表、表結(jié)構(gòu),并實現(xiàn)定期備份數(shù)據(jù)是本系統(tǒng)的核心。已知的Python數(shù)據(jù)庫接口支持眾多關(guān)系數(shù)據(jù)庫包括SQL server, Oracle, Mysql,也支持眾多NoSQL數(shù)據(jù)庫如MongoDB,Redis等,而且,此類數(shù)據(jù)庫接口還在不斷地開發(fā)中,因而本系統(tǒng)具有良好的拓展性。直接讀取數(shù)據(jù)庫數(shù)據(jù),擺脫了操作系統(tǒng)的限制,具有跨平臺、跨數(shù)據(jù)庫的優(yōu)勢,數(shù)據(jù)備份的配置也變得及其簡單。
系統(tǒng)建設(shè)中首先讀取數(shù)據(jù)庫的表列表及表結(jié)構(gòu)描述,SQL Server,Oracle,Mysql這幾個數(shù)據(jù)庫廠商都能夠通過SQL語句讀取相關(guān)數(shù)據(jù),其中MySQL可以獲取表創(chuàng)建時的SQL語句。其次,不同數(shù)據(jù)庫廠商的數(shù)據(jù)類型不同。同樣是二進(jìn)制對象,例如MS SQL中的Image圖片格式,而Oracle中則是BLOB類型。這些不同類型的數(shù)據(jù)通過轉(zhuǎn)換之后,都能夠統(tǒng)一到字符格式。值得一提的是使用Cx_oracle讀取Oracle的BLOB格式數(shù)據(jù)的問題:在批量讀取的BLOB格式數(shù)據(jù)時,采用Cx_oracle中的fetchall函數(shù)在讀取所有的數(shù)據(jù)之后,數(shù)據(jù)被程序使用時會發(fā)生丟失,所以只能采用fetchone或fetchmany(讀取條數(shù)小于等于100)的形式來讀取。
數(shù)據(jù)下載到文本文件之后,以SQL Server為例,采用備份方式導(dǎo)出某數(shù)據(jù)庫需要占用10G的空間,而采用本備份系統(tǒng)導(dǎo)出文件只有6G,進(jìn)一步使用TAR壓縮之后只需占用約3.3G。
4 備份策略
不同類型的應(yīng)用有著不同的數(shù)據(jù)更新頻率。有的應(yīng)用、數(shù)據(jù)庫一學(xué)期更新一次,比如迎新系統(tǒng),學(xué)生基本信息會隨著新生入校而大量更新;而有的則會每天產(chǎn)生些許更新,例如學(xué)生講座系統(tǒng)、一卡通系統(tǒng)、門禁系統(tǒng)等;郵件系統(tǒng)則會每天大量更新數(shù)據(jù)。多數(shù)的數(shù)據(jù)備份同步工具都有定期運行的功能,可以設(shè)置定時、批量的運行作業(yè)。為此,本系統(tǒng)也設(shè)計了類似的數(shù)據(jù)備份作業(yè)系統(tǒng)。系統(tǒng)采用備份定期運行函數(shù)Apscheduler[8],以滿足靈活多變的定時運行需求。endprint
在設(shè)置好以數(shù)據(jù)庫為單位的備份計劃之后,系統(tǒng)會為每個數(shù)據(jù)庫開啟一個獨立進(jìn)程定期備份數(shù)據(jù),同時系統(tǒng)支持多個備份進(jìn)程同時運行。完整的備份流程包括更新數(shù)據(jù)庫列表(SQL Server)、表列表,更新表結(jié)構(gòu),最后下載并備份表中的數(shù)據(jù)。數(shù)據(jù)庫表信息、結(jié)構(gòu)信息等會存儲于系統(tǒng)數(shù)據(jù)庫,便于數(shù)據(jù)恢復(fù)時使用。具體流程如圖2所示。
本系統(tǒng)的數(shù)據(jù)備份效率取決于各源數(shù)據(jù)庫的響應(yīng)速度、網(wǎng)絡(luò)帶寬。系統(tǒng)使用獨立進(jìn)程來備份每一張表,以盡可能地減少由備份服務(wù)器造成的延遲??偟膩碚f,本備份系統(tǒng)多進(jìn)程相對于單進(jìn)程備份效率的提升,取決于源數(shù)據(jù)庫中數(shù)據(jù)在不同表中的分布。如果數(shù)據(jù)均勻地分布在不同的表中,多進(jìn)程系統(tǒng)的備份效率將成倍地增長直至帶寬的極限。若是數(shù)據(jù)主要集中在某幾張表中,備份的效率隨著數(shù)據(jù)集中度的升高而降低。
5 結(jié)論及展望
數(shù)據(jù)庫數(shù)據(jù)直接備份作為數(shù)據(jù)安全的最后一道防御屏障,其重要性不言而喻。數(shù)據(jù)在不同數(shù)據(jù)庫之間的遷移、備份的難度在于:不同數(shù)據(jù)庫并不支持直接對接并傳輸數(shù)據(jù),數(shù)據(jù)庫之間還存在數(shù)據(jù)格式不一致、語法不兼容等問題,表無法直接在另一個數(shù)據(jù)庫之間直接做表結(jié)構(gòu)的復(fù)制。為此,本數(shù)據(jù)庫備份方案,脫離了表結(jié)構(gòu)這一樊籬,直接讀取有價值的數(shù)據(jù)存儲于文本,之后根據(jù)原表結(jié)構(gòu)及備份文本,恢復(fù)數(shù)據(jù)。系統(tǒng)采用直接備份數(shù)據(jù)表的方式在備份恢復(fù)上具有一定的復(fù)雜度,需要將表結(jié)構(gòu)記錄。在設(shè)置好相關(guān)的程序之后,能夠做到批量自動恢復(fù)。因此本備份系統(tǒng),具有備份系統(tǒng)搭建容易,配置簡單,備份數(shù)據(jù)壓縮率高,備份易于恢復(fù)等特點。
在將來,本系統(tǒng)仍然有許多可以改進(jìn)和增加的功能。數(shù)據(jù)備份是以數(shù)據(jù)庫為單位,可以進(jìn)一步細(xì)化到以數(shù)據(jù)中的表為單位;數(shù)據(jù)如何做到智能恢復(fù),即當(dāng)目標(biāo)數(shù)據(jù)庫存有部分?jǐn)?shù)據(jù),而備份數(shù)據(jù)與之有重疊時如何能夠有選擇性地恢復(fù)缺失的數(shù)據(jù)。
參考文獻(xiàn):
[1]黃斌.貴州大學(xué)數(shù)據(jù)中心數(shù)據(jù)備份系統(tǒng)[J].中國海洋大學(xué)學(xué)報(自然科學(xué)版),2008(S1):63-64+72.
[2]王紅梅,陳曉軍,汪立欣,等.高校數(shù)據(jù)中心自動備份方案的研究與實現(xiàn)[J].福建電腦,2013(05):137+166.
[3]戴敏.網(wǎng)絡(luò)數(shù)據(jù)備份系統(tǒng)的研究[D].內(nèi)蒙古大學(xué),2013.
[4]張媛.企業(yè)級開源備份軟件在圖書館數(shù)據(jù)中心的應(yīng)用[J].圖書館學(xué)刊,2014(09):127-130.
[5]于春生.企業(yè)級開源備份軟件在高校數(shù)據(jù)中心中的應(yīng)用[J].北京聯(lián)合大學(xué)學(xué)報(自然科學(xué)版),2012,26(02):11-14.[2017-08-23].DOI:10.16255/j.cnki.ldxbz.2012.02.011.
[6]Xu Q, Zhao L, Xiao M, et al. YuruBackup: A Space-Efficient and Highly Scalable Incremental Backup System in the Cloud[J]. International Journal of Parallel Programming, 2015,43(3):316-338.
[7]LOB的識別及相關(guān)操作[EB/OL].http://nullege.com/codes/search/cx_Oracle.LOB.
[8]Advanced Python Scheduler. http://apscheduler.readthedocs.io/en/latest/index.html.endprint