數據庫遷移方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種數據庫遷移方法及系統(tǒng)。其中方法包括:發(fā)布讀應用和寫應用,預埋第一開關和第二開關;將源數據庫離線備份至離線數據庫;將離線數據庫的數據寫入目標數據庫;根據源數據庫的增量數據日志更改目標數據庫;判斷是否為讀/寫應用切換到目標數據庫,若是,則停止記錄源數據庫的增量數據日志,遷移完成,若否,則將讀/寫應用恢復默認狀態(tài);獲取目標數據庫的增量數據日志;根據目標數據庫的增量數據日志,更改源數據庫;排查原因,修正。本發(fā)明彌補了現有技術在實現數據庫遷移時性能消耗大且導致應用中斷的不足,在不影響源數據庫的應用和用戶的使用的前提下,實現大數據、大并發(fā)的數據無縫遷移。
【專利說明】
數據庫遷移方法及系統(tǒng)
技術領域
[0001 ]本發(fā)明涉及計算機領域,尤其涉及一種數據庫迀移方法及系統(tǒng)。
【背景技術】
[0002]近幾年互聯網公司的快速發(fā)展,各個大公司都采用事業(yè)部制的管理方式來提升公司效率和應對行業(yè)競爭,數據的解耦就成了大趨勢。同時,由于公司業(yè)務的不斷擴大和增長,原先的數據結構已不能滿足日新月異的業(yè)務需求,數據的重構改造就顯得尤為重要。此夕卜,隨著NoSQL(泛指非關系型的數據庫)技術的推廣,SQL(關系型數據庫的結構化查詢語言)數據庫之間,SQL和NoSQL數據庫之間的數據無縫迀移,也成為業(yè)界討論的熱門話題。
[0003]傳統(tǒng)的數據庫迀移方案有:
[0004]1、應用雙“寫”
[0005]即源數據庫(被迀移的數據庫)和目標數據庫(迀移到的數據庫)同時寫入,這種方案的缺點為雙“寫”帶來兩倍的性能消耗,并且事務難以保證,需后臺補償等,后患多。
[0006]2、DB(數據庫)層面復制分發(fā)
[0007]即將源數據庫和目標數據庫置為離線狀態(tài),將源數據庫中的數據復制分發(fā)到目標數據庫,這種方案的缺點為復制分發(fā)會帶來DB CPU和OI等損耗,并且難以做到“無縫”,DB的切換會導致應用的中斷,影響業(yè)務進程。
【發(fā)明內容】
[0008]本發(fā)明要解決的技術問題是現有技術中在實現數據庫的迀移過程中性能消耗大且會導致應用中斷的缺陷,提供一種針對生產高并發(fā)的服務和應用,實現異構數據庫數據無縫迀移,保證對生產無影響的數據庫迀移方法及系統(tǒng)。
[0009]本發(fā)明是通過以下技術方案解決上述技術問題的:
[0010]本發(fā)明提供一種數據庫迀移方法,其特點是,包括:
[0011]T1、發(fā)布讀應用和寫應用,預埋用于切換所述讀應用讀的對象的第一開關和用于切換所述寫應用寫的對象的第二開關,所述讀應用讀的對象和所述寫應用寫的對象均默認為源數據庫,所述第一開關和所述第二開關通過接收指令執(zhí)行切換;
[0012]所述數據庫迀移方法還包括:
[0013]S1、將源數據庫離線備份至離線數據庫,以開始備份的時刻為時間起點記錄所述源數據庫的增量數據日志;
[0014]S2、將所述離線數據庫的數據寫入目標數據庫;
[0015]S3、定時執(zhí)行:根據所述源數據庫的增量數據日志,更改所述目標數據庫,直至所述目標數據庫與所述源數據庫的增量數據日志一致;
[0016]S4、判斷是否為所述第一開關將所述讀應用讀的對象切換到所述目標數據庫且所述第二開關將所述寫應用寫的對象切換到所述目標數據庫,若是,則執(zhí)行S5,若否,則執(zhí)行S6;
[0017]S5、停止記錄所述源數據庫的增量數據日志,迀移完成;
[0018]S6、通過所述第一開關將所述讀應用讀的對象恢復默認狀態(tài)以及通過所述第二開關將所述寫應用寫的對象恢復默認狀態(tài);
[0019]S7、獲取在所述讀應用讀的對象或所述寫應用寫的對象切換到所述目標數據庫期間所述目標數據庫的增量數據日志;
[0020]S8、定時執(zhí)行:根據所述目標數據庫的增量數據日志,更改所述源數據庫;
[0021 ] S9、排查所述讀應用讀的對象和所述寫應用寫的對象未均切換到所述目標數據庫的原因,修正,然后返回S3。
[0022]其中,所述讀應用讀的對象即表示所述讀應用讀的數據庫,所述寫應用寫的對象即表示所述寫應用寫入的數據庫;所述第一開關和所述第二開關為虛擬開關;S2實現了所述離線數據庫和所述目標數據庫的數據同步,在執(zhí)行完S2之后所述離線數據庫和所述目標數據庫的數據相同;S3和S8中的所述定時執(zhí)行是指以一時間周期多次執(zhí)行,所述時間周期可以自由設定,S3和S8的時間周期可以相同或不同。
[0023]本技術方案先將源數據庫備份到離線數據庫,獲取某一時間點的全量數據,再由離線數據庫同步至目標數據庫,保證了不影響源數據庫的應用;利用第一開關和第二開關的切換使得用戶的使用不受影響;通過S3實現數據迀移同步;通過S8保證當生產驗證時及時回退。本技術方案不僅能夠降低數據庫的迀移過程中的性能消耗,還保證在數據庫的迀移過程中應用不會中斷,不局限于源數據庫和目標數據的結構,高效地實現了異構數據庫數據無縫迀移。
[0024]較佳地,S2包括:將所述離線數據庫的數據通過分片和計數技術寫入所述目標數據庫。
[0025]本技術方案能夠進一步實現數據的快速同步。
[0026]較佳地,S2還包括:在所述離線數據庫的數據寫入目標數據庫完畢后,收回所述離線數據庫的編輯權限。
[0027]較佳地,所述數據庫迀移方法還包括:在所述目標數據庫與所述源數據庫的數據一致時產生切換所述第一開關和所述第二開關的指令,以使得所述讀應用讀的對象和所述寫應用寫的對象均切換到所述目標數據庫。
[0028]較佳地,所述增量數據日志包括增、刪及改的處理記錄。
[0029]本發(fā)明還提供一種數據庫迀移系統(tǒng),其特點是,包括:
[0030]應用與開關單元,用于發(fā)布讀應用和寫應用,預埋用于切換所述讀應用讀的對象的第一開關和用于切換所述寫應用寫的對象的第二開關,所述讀應用讀的對象和所述寫應用寫的對象均默認為源數據庫,所述第一開關和所述第二開關通過接收指令執(zhí)行切換;[0031 ]所述數據庫迀移系統(tǒng)還包括:
[0032]備份單元,用于將源數據庫離線備份至離線數據庫,以開始備份的時刻為時間起點記錄所述源數據庫的增量數據日志;
[0033]寫入單元,用于將所述離線數據庫的數據寫入目標數據庫;
[0034]第一更新單元,用于定時執(zhí)行:根據所述源數據庫的增量數據日志,更改所述目標數據庫,直至所述目標數據庫與所述源數據庫的增量數據日志一致;
[0035]判斷單元,用于判斷是否為所述第一開關將所述讀應用讀的對象切換到所述目標數據庫且所述第二開關將所述寫應用寫的對象切換到所述目標數據庫,若是,則停止記錄所述源數據庫的增量數據日志,迀移完成,若否,則調用恢復單元;
[0036]恢復單元,用于通過所述第一開關將所述讀應用讀的對象恢復默認狀態(tài)以及通過所述第二開關將所述寫應用寫的對象恢復默認狀態(tài);
[0037]獲取單元,用于獲取在所述讀應用讀的對象或所述寫應用寫的對象切換到所述目標數據庫期間所述目標數據庫的增量數據日志;
[0038]第二更新單元,用于定時執(zhí)行:根據所述目標數據庫的增量數據日志,更改所述源數據庫;
[0039]排查單元,用于排查所述讀應用讀的對象和所述寫應用寫的對象未均切換到所述目標數據庫的原因,修正,然后調用第一更新單元。
[0040]較佳地,所述寫入單元用于將所述離線數據庫的數據通過分片和計數技術寫入所述目標數據庫。
[0041 ]較佳地,所述寫入單元還用于在所述離線數據庫的數據寫入目標數據庫完畢后,收回所述離線數據庫的編輯權限。
[0042]較佳地,所述數據庫迀移系統(tǒng)還包括:
[0043]指令單元,用于在所述目標數據庫與所述源數據庫的數據一致時產生切換所述第一開關和所述第二開關的指令,以使得所述讀應用讀的對象和所述寫應用寫的對象均切換到所述目標數據庫。
[0044]較佳地,所述增量數據日志包括增、刪及改的處理記錄。
[0045]在符合本領域常識的基礎上,上述各優(yōu)選條件,可任意組合,即得本發(fā)明各較佳實例。
[0046]本發(fā)明的積極進步效果在于:本發(fā)明能夠在不影響源數據庫的應用和用戶的使用的前提下,實現數據迀移同步和生產驗證時的及時回退。本發(fā)明還具有不限業(yè)務、不限數據庫、不限數據結構、高可用等特點,實現大數據、大并發(fā)的數據無縫迀移,降低數據庫的迀移過程中的性能消耗,保證在數據庫的迀移過程中應用不會中斷,有低耦合、高可用等優(yōu)點。
【附圖說明】
[0047]圖1為本發(fā)明較佳實施例的數據庫迀移方法的流程圖。
[0048]圖2為本發(fā)明較佳實施例的數據庫迀移系統(tǒng)的系統(tǒng)框圖。
【具體實施方式】
[0049]下面通過實施例的方式進一步說明本發(fā)明,但并不因此將本發(fā)明限制在所述的實施例范圍之中。
[0050]實施例
[0051 ] 一種數據庫迀移方法,如圖1所示,包括:
[0052]步驟101、發(fā)布讀應用和寫應用,預埋用于切換所述讀應用讀的對象的第一開關和用于切換所述寫應用寫的對象的第二開關,所述讀應用讀的對象和所述寫應用寫的對象均默認為源數據庫,所述第一開關和所述第二開關通過接收指令執(zhí)行切換。其中,所述讀應用和寫應用采用現有技術實現,分別用于讀和寫數據庫。本實施例中讀應用默認讀源數據庫,寫應用默認寫源數據庫。
[0053]所述數據庫迀移方法還包括:
[0054]步驟201、將源數據庫離線備份至離線數據庫,以開始備份的時刻為時間起點記錄所述源數據庫的增量數據日志。具體地,可以使用觸發(fā)器或利用數據庫本身讀寫分離功能,將源數據庫的增量數據日志記錄到指定的日志表中。所述增量數據日志包括增、刪及改的處理記錄。
[0055]步驟202、將所述離線數據庫的數據寫入目標數據庫。具體地,可以將所述離線數據庫的數據通過分片和計數技術寫入所述目標數據庫,這樣能保證快速同步。步驟202還可以包括,在所述離線數據庫的數據寫入目標數據庫完畢后,收回所述離線數據庫的編輯權限。被收回編輯權限后,所述離線數據庫就不能夠被編輯。
[0056]步驟203、定時執(zhí)行:根據所述源數據庫的增量數據日志,更改所述目標數據庫,直至所述目標數據庫與所述源數據庫的增量數據日志一致。具體地,可以通過計算機編程中的Job實現,啟動Job消費日志表中增量數據日志,根據時間戳“追”源數據庫的增量數據到目標數據庫。所述目標數據庫與所述源數據庫的增量數據日志一致表明“追上”源數據庫的增量數據,即此刻源數據庫和目標數據庫的數據理論上應該一致,但是由于數據同步或更改中也有可能出現錯誤,進而導致源數據庫和目標數據庫的數據不一致。在所述目標數據庫與所述源數據庫的數據一致時產生切換所述第一開關和所述第二開關的指令,以使得所述讀應用讀的對象和所述寫應用寫的對象均切換到所述目標數據庫。
[0057]步驟204、判斷是否為所述第一開關將所述讀應用讀的對象切換到所述目標數據庫且所述第二開關將所述寫應用寫的對象切換到所述目標數據庫,若是,則執(zhí)行步驟205,若否,則執(zhí)行步驟206ο即判斷讀/寫應用是否均讀/寫目標數據庫,若讀/寫應用均讀/寫目標數據庫,則表明目標數據庫與源數據庫的數據一致且讀/寫應用已經由源數據庫切換至目標數據庫,否則,則表明源數據庫和目標數據庫不一致或者由于其它原因讀/寫應用還不能讀/寫目標數據庫。
[0058]步驟205、停止記錄所述源數據庫的增量數據日志,迀移完成。
[0059]步驟206、通過所述第一開關將所述讀應用讀的對象恢復默認狀態(tài)以及通過所述第二開關將所述寫應用寫的對象恢復默認狀態(tài)。即將讀/寫應用均讀/寫源數據庫。
[0060]步驟207、獲取在所述讀應用讀的對象或所述寫應用寫的對象切換到所述目標數據庫期間所述目標數據庫的增量數據日志。
[0061 ]步驟208、定時執(zhí)行:根據所述目標數據庫的增量數據日志,更改所述源數據庫。具體地,可以通過計算機編程中的Job實現,啟動Job消費目標數據庫的增量數據日志,根據時間戳回寫目標數據庫的增量數據到源數據庫。這樣能夠保證源數據庫數據的準確性。
[0062]步驟209、排查所述讀應用讀的對象和所述寫應用寫的對象未均切換到所述目標數據庫的原因,修正,然后返回步驟203。本實施例的數據庫迀移方法可以采用人工排查,具體的排查方式靈活多樣,可以根據數據庫的情況或需求自行安排。
[0063]本實施例的一種數據庫迀移系統(tǒng),如圖2所示,包括:應用與開關單元301、備份單元302、寫入單元303、第一更新單元304、指令單元305、判斷單元306、恢復單元307、獲取單元308、第二更新單元309和排查單元310。
[0064]應用與開關單元301,用于發(fā)布讀應用和寫應用,預埋用于切換所述讀應用讀的對象的第一開關和用于切換所述寫應用寫的對象的第二開關,所述讀應用讀的對象和所述寫應用寫的對象均默認為源數據庫,所述第一開關和所述第二開關通過接收指令執(zhí)行切換。其中,所述讀應用和寫應用采用現有技術實現,分別用于讀和寫數據庫。本實施例中讀應用默認讀源數據庫,寫應用默認寫源數據庫。
[0065]備份單元302,用于將源數據庫離線備份至離線數據庫,以開始備份的時刻為時間起點記錄所述源數據庫的增量數據日志。具體地,可以使用觸發(fā)器或利用數據庫本身讀寫分離功能,將源數據庫的增量數據日志記錄到指定的日志表中。所述增量數據日志包括增、刪及改的處理記錄。
[0066]寫入單元303,用于將所述離線數據庫的數據寫入目標數據庫。具體地,可以將所述離線數據庫的數據通過分片和計數技術寫入所述目標數據庫,這樣能保證快速同步。寫入單元還可以用于,在所述離線數據庫的數據寫入目標數據庫完畢后,收回所述離線數據庫的編輯權限。被收回編輯權限后,所述離線數據庫就不能夠被編輯。
[0067]第一更新單元304,用于定時執(zhí)行:根據所述源數據庫的增量數據日志,更改所述目標數據庫,直至所述目標數據庫與所述源數據庫的增量數據日志一致。具體地,可以通過計算機編程中的Job實現,啟動Job消費日志表中增量數據日志,根據時間戳“追”源數據庫的增量數據到目標數據庫。所述目標數據庫與所述源數據庫的增量數據日志一致表明“追上”源數據庫的增量數據,即此刻源數據庫和目標數據庫的數據理論上應該一致,但是由于數據同步或更改中也有可能出現錯誤,進而導致源數據庫和目標數據庫的數據不一致。指令單元305,用于在所述目標數據庫與所述源數據庫的數據一致時產生切換所述第一開關和所述第二開關的指令,以使得所述讀應用讀的對象和所述寫應用寫的對象均切換到所述目標數據庫。
[0068]判斷單元306,用于判斷是否為所述第一開關將所述讀應用讀的對象切換到所述目標數據庫且所述第二開關將所述寫應用寫的對象切換到所述目標數據庫,若是,則停止記錄所述源數據庫的增量數據日志,迀移完成,若否,則調用恢復單元307。即判斷讀/寫應用是否均讀/寫目標數據庫,若讀/寫應用均讀/寫目標數據庫,則表明目標數據庫與源數據庫的數據一致且讀/寫應用已經由源數據庫切換至目標數據庫,否則,則表明源數據庫和目標數據庫不一致或者由于其它原因讀/寫應用還不能讀/寫目標數據庫。
[0069]恢復單元307,用于通過所述第一開關將所述讀應用讀的對象恢復默認狀態(tài)以及通過所述第二開關將所述寫應用寫的對象恢復默認狀態(tài)。即將讀/寫應用均讀/寫源數據庫。
[0070]獲取單元308,用于獲取在所述讀應用讀的對象或所述寫應用寫的對象切換到所述目標數據庫期間所述目標數據庫的增量數據日志。
[0071 ]第二更新單元309,用于定時執(zhí)行:根據所述目標數據庫的增量數據日志,更改所述源數據庫。具體地,可以通過計算機編程中的Job實現,啟動Job消費目標數據庫的增量數據日志,根據時間戳回寫目標數據庫的增量數據到源數據庫。這樣能夠保證源數據庫數據的準確性。
[0072]排查單元310,用于排查所述讀應用讀的對象和所述寫應用寫的對象未均切換到所述目標數據庫的原因,修正,然后調用第一更新單元。所述排查單元可以采用人工排查,具體的排查方式靈活多樣,可以根據數據庫的情況或需求自行安排。
[0073]通過本實施例的數據庫迀移方法及系統(tǒng),源數據庫的數據可以無縫迀移至目標數據庫中,適用任何同構或異構DB的迀移。
[0074]雖然以上描述了本發(fā)明的【具體實施方式】,但是本領域的技術人員應當理解,這些僅是舉例說明,本發(fā)明的保護范圍是由所附權利要求書限定的。本領域的技術人員在不背離本發(fā)明的原理和實質的前提下,可以對這些實施方式做出多種變更或修改,但這些變更和修改均落入本發(fā)明的保護范圍。
【主權項】
1.一種數據庫迀移方法,其特征在于,包括: T1、發(fā)布讀應用和寫應用,預埋用于切換所述讀應用讀的對象的第一開關和用于切換所述寫應用寫的對象的第二開關,所述讀應用讀的對象和所述寫應用寫的對象均默認為源數據庫,所述第一開關和所述第二開關通過接收指令執(zhí)行切換; 所述數據庫迀移方法還包括: S1、將源數據庫離線備份至離線數據庫,以開始備份的時刻為時間起點記錄所述源數據庫的增量數據日志; &、將所述離線數據庫的數據寫入目標數據庫; 53、定時執(zhí)行:根據所述源數據庫的增量數據日志,更改所述目標數據庫,直至所述目標數據庫與所述源數據庫的增量數據日志一致; 54、判斷是否為所述第一開關將所述讀應用讀的對象切換到所述目標數據庫且所述第二開關將所述寫應用寫的對象切換到所述目標數據庫,若是,則執(zhí)行&,若否,則執(zhí)行S6; 55、停止記錄所述源數據庫的增量數據日志,迀移完成; 56、通過所述第一開關將所述讀應用讀的對象恢復默認狀態(tài)以及通過所述第二開關將所述寫應用寫的對象恢復默認狀態(tài); 57、獲取在所述讀應用讀的對象或所述寫應用寫的對象切換到所述目標數據庫期間所述目標數據庫的增量數據日志; 58、定時執(zhí)行:根據所述目標數據庫的增量數據日志,更改所述源數據庫; 59、排查所述讀應用讀的對象和所述寫應用寫的對象未均切換到所述目標數據庫的原因,修正,然后返回S3。2.如權利要求1所述的數據庫迀移方法,其特征在于,S2包括:將所述離線數據庫的數據通過分片和計數技術寫入所述目標數據庫。3.如權利要求1或2所述的數據庫迀移方法,其特征在于,S2還包括:在所述離線數據庫的數據寫入目標數據庫完畢后,收回所述離線數據庫的編輯權限。4.如權利要求1所述的數據庫迀移方法,其特征在于,所述數據庫迀移方法還包括:在所述目標數據庫與所述源數據庫的數據一致時產生切換所述第一開關和所述第二開關的指令,以使得所述讀應用讀的對象和所述寫應用寫的對象均切換到所述目標數據庫。5.如權利要求1所述的數據庫迀移方法,其特征在于,所述增量數據日志包括增、刪及改的處理記錄。6.一種數據庫迀移系統(tǒng),其特征在于,包括: 應用與開關單元,用于發(fā)布讀應用和寫應用,預埋用于切換所述讀應用讀的對象的第一開關和用于切換所述寫應用寫的對象的第二開關,所述讀應用讀的對象和所述寫應用寫的對象均默認為源數據庫,所述第一開關和所述第二開關通過接收指令執(zhí)行切換; 所述數據庫迀移系統(tǒng)還包括: 備份單元,用于將源數據庫離線備份至離線數據庫,以開始備份的時刻為時間起點記錄所述源數據庫的增量數據日志; 寫入單元,用于將所述離線數據庫的數據寫入目標數據庫; 第一更新單元,用于定時執(zhí)行:根據所述源數據庫的增量數據日志,更改所述目標數據庫,直至所述目標數據庫與所述源數據庫的增量數據日志一致; 判斷單元,用于判斷是否為所述第一開關將所述讀應用讀的對象切換到所述目標數據庫且所述第二開關將所述寫應用寫的對象切換到所述目標數據庫,若是,則停止記錄所述源數據庫的增量數據日志,迀移完成,若否,則調用恢復單元; 恢復單元,用于通過所述第一開關將所述讀應用讀的對象恢復默認狀態(tài)以及通過所述第二開關將所述寫應用寫的對象恢復默認狀態(tài); 獲取單元,用于獲取在所述讀應用讀的對象或所述寫應用寫的對象切換到所述目標數據庫期間所述目標數據庫的增量數據日志; 第二更新單元,用于定時執(zhí)行:根據所述目標數據庫的增量數據日志,更改所述源數據庫; 排查單元,用于排查所述讀應用讀的對象和所述寫應用寫的對象未均切換到所述目標數據庫的原因,修正,然后調用第一更新單元。7.如權利要求6所述的數據庫迀移系統(tǒng),其特征在于,所述寫入單元用于將所述離線數據庫的數據通過分片和計數技術寫入所述目標數據庫。8.如權利要求6或7所述的數據庫迀移系統(tǒng),其特征在于,所述寫入單元還用于在所述離線數據庫的數據寫入目標數據庫完畢后,收回所述離線數據庫的編輯權限。9.如權利要求6所述的數據庫迀移方法,其特征在于,所述數據庫迀移系統(tǒng)還包括: 指令單元,用于在所述目標數據庫與所述源數據庫的數據一致時產生切換所述第一開關和所述第二開關的指令,以使得所述讀應用讀的對象和所述寫應用寫的對象均切換到所述目標數據庫。10.如權利要求6所述的數據庫迀移系統(tǒng),其特征在于,所述增量數據日志包括增、刪及改的處理記錄。
【文檔編號】G06F17/30GK105868343SQ201610183655
【公開日】2016年8月17日
【申請日】2016年3月28日
【發(fā)明人】周源, 陳秋成, 張妮, 馮毅
【申請人】上海攜程商務有限公司