,具有與本發(fā)明所屬領
[0052]域中的普通技術人員的一般理解相同的意義。還應該理解的是,諸如通用字典中定義的那些術語,應該被理解為具有與現(xiàn)有技術的上下文中的意義一致的意義,并且除非像這里一樣被特定定義,否則不會用理想化或過于正式的含義來解釋。
[0053 ] 本發(fā)明實施例中涉及的數(shù)據(jù)庫的類型為No SQL,即非關系型的數(shù)據(jù)庫,No SQL類型的數(shù)據(jù)庫可存儲大規(guī)模數(shù)據(jù)集合多重數(shù)據(jù)種類,尤其是大數(shù)據(jù)規(guī)模的存儲。NoSQL類型的數(shù)據(jù)庫支持鍵值(Key-Value)的數(shù)據(jù)類型。
[0054]圖1為本發(fā)明中一個實施例的數(shù)據(jù)庫的備份方法的流程圖。
[0055]步驟S110:當接收到主數(shù)據(jù)庫的數(shù)據(jù)同步請求時,解析數(shù)據(jù)同步請求中的數(shù)據(jù)操作命令,執(zhí)行數(shù)據(jù)操作命令并在同步日志中記錄數(shù)據(jù)操作命令對應的信息;步驟S120:以預定的備份頻率,將從數(shù)據(jù)庫的同步日志備份至本地磁盤中,以生成備份日志。
[0056]本發(fā)明的實施例中,提出了一種數(shù)據(jù)庫的備份方案,通過建立從數(shù)據(jù)庫中數(shù)據(jù)的落盤備份方式,在從數(shù)據(jù)庫發(fā)生故障的情況下,可通過備份至本地磁盤的備份日志實現(xiàn)從庫的快速數(shù)據(jù)恢復,大大提高了數(shù)據(jù)恢復效率,從而保證了從數(shù)據(jù)庫的持續(xù)數(shù)據(jù)穩(wěn)定性,為在主數(shù)據(jù)庫發(fā)生故障時由與其同步運行的其它從數(shù)據(jù)庫服務器代替該故障主數(shù)據(jù)庫服務器提供讀寫訪問服務,以滿足數(shù)據(jù)庫系統(tǒng)向前端業(yè)務提供連續(xù)性服務提供有力保障。本發(fā)明的實施例中,通過從數(shù)據(jù)庫數(shù)據(jù)的落盤備份、從數(shù)據(jù)庫數(shù)據(jù)重新加載時通過落盤的備份日志快速恢復備份數(shù)據(jù)以及基于備份日志中的相應標識通過主數(shù)據(jù)庫實現(xiàn)快速數(shù)據(jù)補齊,可確保當從數(shù)據(jù)庫發(fā)生故障后能夠?qū)⒐收蠌臄?shù)據(jù)庫的數(shù)據(jù)快速修復,避免了數(shù)據(jù)意外丟失,最終實現(xiàn)主從數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)高穩(wěn)定性和高業(yè)務連續(xù)性。
[0057]步驟S110:當接收到主數(shù)據(jù)庫的數(shù)據(jù)同步請求時,解析數(shù)據(jù)同步請求中的數(shù)據(jù)操作命令,執(zhí)行數(shù)據(jù)操作命令并在同步日志中記錄數(shù)據(jù)操作命令對應的信息。
[0058]其中,數(shù)據(jù)操作命令對應的信息包括數(shù)據(jù)操作命令及與數(shù)據(jù)同步請求相應的標識
?目息。
[0059]其中,數(shù)據(jù)同步請求相應的標識信息,包括但不限于:
[0060]數(shù)據(jù)同步請求的時間信息;
[0061 ]數(shù)據(jù)同步請求的請求ID;
[0062]在從數(shù)據(jù)庫中執(zhí)行數(shù)據(jù)操作命令的時間信息;
[0063]在從數(shù)據(jù)庫中執(zhí)行數(shù)據(jù)操作命令的執(zhí)行ID。
[0064]例如,在包括一個主數(shù)據(jù)庫DBi和至少一個從數(shù)據(jù)庫DB^數(shù)據(jù)系統(tǒng)中,DBdPDB2通過TCP(Transmiss1n Control Protocol,傳輸控制協(xié)議)協(xié)議建立通信鏈接,當主數(shù)據(jù)庫DBi接收來自外部的數(shù)據(jù)操作命令時,如添加一條key-value數(shù)據(jù)存儲格式的新數(shù)據(jù)“Ki+1”,其中key數(shù)據(jù)單元為“Kf,value數(shù)據(jù)單元為“1”,在DBi*執(zhí)行該數(shù)據(jù)操作命令,即執(zhí)行添加“Kdl”數(shù)據(jù)的操作,隨后向DB2發(fā)送包括該數(shù)據(jù)操作命令的數(shù)據(jù)同步請求,DB2接收到主數(shù)據(jù)庫的數(shù)據(jù)同步請求時,DB2解析來自DB^數(shù)據(jù)同步請求為添加%+1”的數(shù)據(jù)操作命令,隨后執(zhí)行添加“Ki+1”的操作,并在從DB2的同步日志中記錄添加“Kdl”的數(shù)據(jù)操作命令以及與數(shù)據(jù)同步請求相應的標識信息,如在DB2中接收到添加“Ki+1”數(shù)據(jù)操作請求的時間信息“2015-05-0612: 20:00”或DB2中執(zhí)行添加“Ki+1”數(shù)據(jù)操作命令的時間信息“2015-05-0612: 20:10”或數(shù)據(jù)同步請求ID “01”或DB2中執(zhí)行添加“Ki+1”數(shù)據(jù)操作命令的執(zhí)行ID %-ΟΓ。
[0065]步驟S120:以預定的備份頻率,將從數(shù)據(jù)庫的同步日志備份至本地磁盤中,以生成備份日志。
[0066]其中,以預定的備份頻率,將從數(shù)據(jù)庫的同步日志備份至本地磁盤中,具體包括但不限于以下任一項情形:
[0067]依據(jù)預定的時間間隔,將從數(shù)據(jù)庫的同步日志備份至本地磁盤中;或
[0068]依據(jù)預定的數(shù)據(jù)操作的條目數(shù),將從數(shù)據(jù)庫的同步日志備份至本地磁盤中。
[0069]例如,從數(shù)據(jù)庫DB2接收到來自主數(shù)據(jù)庫數(shù)據(jù)同步請求生成的同步日志,首先緩存在DB2的緩存區(qū)域中,并以預定的備份頻率如每小時一次,將緩存區(qū)域中的同步日志備份至本地磁盤中,以生成備份日志。
[0070]又例如,預定的數(shù)據(jù)操作的條目數(shù)如10條數(shù)據(jù)操作條目,從數(shù)據(jù)庫DB2接收到來自主數(shù)據(jù)庫DBi的數(shù)據(jù)同步請求生成的同步日志,首先緩存在DB2的緩存區(qū)域中,當緩存區(qū)域中緩存的同步日志中包括的數(shù)據(jù)操作命令對應的信息的條目數(shù)達到10條時,將包括10條數(shù)據(jù)操作命令對應的信息的同步日志備份至本地磁盤中,以生成備份日志。
[0071]其中,同步日志至是二進制日志binlog。
[0072]例如,從數(shù)據(jù)庫DB2中的同步日志為二進制日志binlog,從數(shù)據(jù)庫DB2中存儲的數(shù)據(jù)操作命令及數(shù)據(jù)同步請求相應的標識信息以二進制形式存儲至DB2的二進制日志binlog中。
[0073]其中,從數(shù)據(jù)庫為內(nèi)存型數(shù)據(jù)庫。
[0074]本發(fā)明的實施例中,主從數(shù)據(jù)庫均為內(nèi)存型數(shù)據(jù)庫。內(nèi)存型數(shù)據(jù)庫可與本地磁盤之間實現(xiàn)高效的數(shù)據(jù)傳輸及讀寫操作,從而為實現(xiàn)數(shù)據(jù)高效存儲及備份提供了有力保障。
[0075]在一優(yōu)選實施例中,如圖2所示,當從數(shù)據(jù)庫重新加載時,該方法還包括步驟S210、步驟S220和步驟S230。步驟S210:基于備份日志,對從數(shù)據(jù)庫進行數(shù)據(jù)恢復;步驟S220:將備份日志中記錄的最后一條數(shù)據(jù)操作命令對應的標識信息,與主數(shù)據(jù)庫中數(shù)據(jù)操作命令的標識信息進行對比,確定同步偏移量;步驟S230:將主數(shù)據(jù)中與同步偏移量對應的數(shù)據(jù)操作命令同步至從數(shù)據(jù)庫中。
[0076]例如,預定義數(shù)據(jù)同步請求ID值以自增長整數(shù)型方式進行記錄,當從數(shù)據(jù)庫DB2中的同步日志丟失時,通過執(zhí)行本地磁盤中備份日志所記載的數(shù)據(jù)操作命令對從數(shù)據(jù)庫進行數(shù)據(jù)恢復,同時,備份日志中記錄的最后一條數(shù)據(jù)操作命令對應的標識信息,如數(shù)據(jù)同步請求的請求ID “01”與主數(shù)據(jù)庫中同步日志中記錄的最后一條數(shù)據(jù)操作命令的標識信息,如數(shù)據(jù)同步請求的請求ID“06”進行對比,確定同步偏移量為數(shù)據(jù)同步請求的請求ID“02”至數(shù)據(jù)同步請求的請求ID “06”,隨后,將主數(shù)據(jù)DBi中與數(shù)據(jù)同步請求的請求ID “02”至數(shù)據(jù)同步請求的請求ID “06”對應的數(shù)據(jù)操作命令同步至DB2中。
[0077]又例如,接上例,當08:主數(shù)據(jù)庫由于數(shù)據(jù)庫崩潰或數(shù)據(jù)庫所在設備發(fā)生物理性損壞等導致DBi主數(shù)據(jù)庫數(shù)據(jù)丟失的情況下,可獲取DB2從數(shù)據(jù)庫的同步日志,在重新初始化建立DBi主數(shù)據(jù)庫后,將DB2從數(shù)據(jù)庫的數(shù)據(jù)全部同步至DBi主數(shù)據(jù)庫中,具體為通過執(zhí)行DB2從數(shù)據(jù)庫的同步日志中的記錄重新恢復DB2從數(shù)據(jù)庫中的數(shù)據(jù)。
[0078]在另一優(yōu)選實施例中,當主數(shù)據(jù)庫DBi接收到來自外部的數(shù)據(jù)操作命令,即修改主數(shù)據(jù)庫DBi中的數(shù)據(jù)%+add”為“h+addit1n”,可通過key值查找到相應的數(shù)據(jù)為“K#add”并修改為"Ki+add i t i on”,主數(shù)據(jù)庫DBj# %+add”修改為"Ki+addi t 1n”的操作信息以二進制形式存儲至DBi的二進制日志binlog中,并發(fā)送包括該數(shù)據(jù)操作命令的數(shù)據(jù)同步請求至從數(shù)據(jù)庫DB2,從數(shù)據(jù)庫DB2對接收到的該數(shù)據(jù)同步請求進行解析并執(zhí)行“Ki+add”修改為%+addit1n”的數(shù)據(jù)操作命令,且從數(shù)據(jù)庫DB2中將%+add”修改為%+addit1n”的數(shù)據(jù)操作命令、在DB2中接收到將“Ki+add”修改為“Ki+addit1n”數(shù)據(jù)操作請求的時間信息“2015-10-10 07:10:00”相關聯(lián)地存儲至DB2的二進制日志binlog中。如當前時間為“2015-10-10 07:10:01”,從數(shù)據(jù)庫DB2由于設備停電導致服務中斷,在時間“2015-1