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