主備板的數(shù)據(jù)庫雙向同步方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供一種主備板的數(shù)據(jù)庫雙向同步方法,包括如下步驟:根據(jù)預設的時間周期分別對主備板的數(shù)據(jù)庫進行備份,得到對應的備份數(shù)據(jù);檢測主備板的運行狀態(tài);若主備板都重啟過,則主備板的數(shù)據(jù)庫分別通過其備份數(shù)據(jù)進行數(shù)據(jù)恢復。本發(fā)明還提供對應的系統(tǒng),能在主備板重啟或異常宕機時,保證主備板數(shù)據(jù)庫保持同步狀態(tài)。
【專利說明】主備板的數(shù)據(jù)庫雙向同步方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫同步【技術(shù)領(lǐng)域】,特別是涉及一種主備板的數(shù)據(jù)庫雙向同步方法,以及一種主備板的數(shù)據(jù)庫雙向同步系統(tǒng)。
【背景技術(shù)】
[0002]在網(wǎng)關(guān)的HA (High Availability,高可靠性)切換過程中,主備板的數(shù)據(jù)庫數(shù)據(jù)同步是必不可少的一步。Mysql數(shù)據(jù)庫因其高性能、穩(wěn)定可靠和免費開源,被廣泛用于中小型項目的數(shù)據(jù)載體。Mysql自身帶有數(shù)據(jù)庫復制功能,即數(shù)據(jù)庫同步功能,具體原理如圖1。簡單來說,Mysql數(shù)據(jù)庫的同步是通過日志來進行的,備板獲取主機的日志,然后在本端解析執(zhí)行,來完成數(shù)據(jù)同步。
[0003]Mysql自帶的同步功能在正常情況下工作良好,但是一旦涉及到板卡系統(tǒng)重啟或者掉電,同步就會產(chǎn)生不可預知的異常,這部分異常產(chǎn)生的主要源于對數(shù)據(jù)庫的操作日志沒辦法即時寫入磁盤和網(wǎng)絡傳輸過程中的丟失。另外在異常宕機時,甚至可能產(chǎn)生數(shù)據(jù)庫崩潰的嚴重情況,而網(wǎng)關(guān)HA切換過程,就經(jīng)常涉及到掉電重啟等情況。
[0004]在互為主/備(master/slave)的兩個數(shù)據(jù)庫之間。slave上mysql的同步工作有兩個線程I/O thread和SQL thread, I/O線程的作用是從master的3306端口(Mysql默認端口)把它的binlog取過來(master在被修改了任何內(nèi)容后,就會把修改了什么寫到自己的binlog等待slave更新),然后寫到本地的relay-log上;而SQL線程則是去讀本地的relay-log,再轉(zhuǎn)換成本mysql所能理解的語句,于是同步就這樣一步步完成。
[0005]正常情況下,配置過Mysql雙向同步后,能夠按照上面的描述工作,雙主的兩臺機A,B能夠同步所有對數(shù)據(jù)庫的操作。這里有一點需要注意,對于數(shù)據(jù)庫自增的主鍵,需要在配置里面添加配置避免主鍵沖突。
[0006]但是在系統(tǒng)宕機、重啟、或者掉電時,應用程序?qū)?shù)據(jù)庫的操作的日志很可能沒那么即時的刷寫到磁盤上去,導致這部分數(shù)據(jù)沒法同步到對端數(shù)據(jù)庫中;而且傳輸中的數(shù)據(jù)也可能丟失。
【發(fā)明內(nèi)容】
[0007]基于此,本發(fā)明提供一種主備板的數(shù)據(jù)庫雙向同步方法和系統(tǒng),能在主備板運行異常時,保證主備板數(shù)據(jù)庫保持同步狀態(tài)。
[0008]一種主備板的數(shù)據(jù)庫雙向同步方法,包括如下步驟:
[0009]根據(jù)預設的時間周期分別對主備板的數(shù)據(jù)庫進行備份,得到對應的備份數(shù)據(jù);
[0010]檢測主備板是否重啟過;
[0011]若主備板都重啟過,則主備板的數(shù)據(jù)庫分別通過其備份數(shù)據(jù)進行數(shù)據(jù)恢復。
[0012]一種主備板的數(shù)據(jù)庫雙向同步系統(tǒng),包括:
[0013]備份模塊,用于根據(jù)預設的時間周期分別對主備板的數(shù)據(jù)庫進行備份,得到對應的備份數(shù)據(jù);[0014]檢測模塊,用于檢測主備板是否重啟過;
[0015]恢復模塊,用于若主備板都重啟過,則主備板的數(shù)據(jù)庫分別通過其備份數(shù)據(jù)進行數(shù)據(jù)恢復。
[0016]上述主備板的數(shù)據(jù)庫雙向同步方法和系統(tǒng),根據(jù)主備板的工作狀態(tài),可設定在網(wǎng)關(guān)較為空閑的時候分別對主備板的數(shù)據(jù)庫進行備份,如果板卡同時重啟并且重啟后數(shù)據(jù)庫服務都不正常,則通過備份的數(shù)據(jù)進行恢復,保證在主備板同時運行異常時仍能保持數(shù)據(jù)同步;本發(fā)明實現(xiàn)過程簡單,能良好的保證數(shù)據(jù)庫同步狀態(tài)正確,解決了主備板運行異常時的數(shù)據(jù)同步難題。
【專利附圖】
【附圖說明】
[0017]圖1為傳統(tǒng)技術(shù)數(shù)據(jù)庫同步的示意圖。
[0018]圖2為本發(fā)明主備板的數(shù)據(jù)庫雙向同步方法在一實施例中的流程示意圖。
[0019]圖3為本發(fā)明主備板的數(shù)據(jù)庫雙向同步方法在一實施例中的邏輯框圖。
[0020]圖4為本發(fā)明主備板的數(shù)據(jù)庫雙向同步系統(tǒng)在一實施例中的結(jié)構(gòu)示意圖。
【具體實施方式】
[0021]下面結(jié)合實施例及附圖對本發(fā)明作進一步詳細說明,但本發(fā)明的實施方式不限于此。
[0022]如圖2所示,是本發(fā)明一種主備板的數(shù)據(jù)庫雙向同步方法,包括如下步驟:
[0023]S21、根據(jù)預設的時間周期分別對主備板的數(shù)據(jù)庫進行備份,得到對應的備份數(shù)據(jù);
[0024]在本步驟中,可根據(jù)主備板的工作狀態(tài),設定在網(wǎng)關(guān)較為空閑的時候分別對主備板的數(shù)據(jù)庫進行備份;或者也可設定更為頻繁的備份方式,如每小時進行一次數(shù)據(jù)庫備份;如果板卡同時重啟并且重啟后數(shù)據(jù)庫服務都不正常,則通過備份的數(shù)據(jù)進行恢復;主備板備份的數(shù)據(jù)分別存儲在各自對應的數(shù)據(jù)庫中。
[0025]S22、檢測主備板的運行狀態(tài);
[0026]S23、若主備板都重啟過,則主備板的數(shù)據(jù)庫分別通過其備份數(shù)據(jù)進行數(shù)據(jù)恢復;
[0027]板卡系統(tǒng)若重啟或者掉電,數(shù)據(jù)庫雙向同步就會產(chǎn)生不可預知的異常,這部分異常產(chǎn)生的原因主要源于對數(shù)據(jù)庫的操作日志沒辦法即時寫入磁盤和網(wǎng)絡傳輸過程中的丟失。另外在異常宕機時,甚至可能產(chǎn)生數(shù)據(jù)庫崩潰的嚴重情況,而網(wǎng)關(guān)HA切換過程,就經(jīng)常涉及到掉電重啟等情況;
[0028]在本實施例中,循環(huán)檢測主備板的運行狀態(tài),當主板與備板都重啟過時,由于兩板同時重啟或者被整機斷電過,因此無法預知哪一個板卡的數(shù)據(jù)是正確的,因此兩板同時宕機時,以備份的數(shù)據(jù)分別對各自的數(shù)據(jù)庫進行數(shù)據(jù)恢復,保證主備板數(shù)據(jù)同步。
[0029]在一較佳實施例中,還可包括步驟:
[0030]若主板重啟過,備板未重啟,則以備板的數(shù)據(jù)庫對主板的數(shù)據(jù)庫進行恢復;
[0031]若主板未重啟,備板重啟過,并且備板的數(shù)據(jù)庫與主板的數(shù)據(jù)庫不同步,則以主板的數(shù)據(jù)庫對備板的數(shù)據(jù)庫進行數(shù)據(jù)恢復;
[0032]在本實施例中,主板重啟過,則主板數(shù)據(jù)庫的數(shù)據(jù)可能發(fā)生異常,需恢復主板數(shù)據(jù)庫的數(shù)據(jù);由于備板未重啟過,其數(shù)據(jù)庫運行正常,以備板數(shù)據(jù)庫當前的數(shù)據(jù)對主板的數(shù)據(jù)庫進行恢復;
[0033]備板重啟,則檢測雙板數(shù)據(jù)庫的同步狀態(tài),若備板數(shù)據(jù)庫與主板數(shù)據(jù)庫的數(shù)據(jù)不同步,則以主板的數(shù)據(jù)庫當前的數(shù)據(jù)對備板的數(shù)據(jù)庫進行數(shù)據(jù)恢復;若同步,則可不進行備板數(shù)據(jù)庫恢復操作。
[0034]在一較佳實施例中,可在根據(jù)預設的時間周期對數(shù)據(jù)庫進行備份時,將當前備份的數(shù)據(jù)覆蓋上一次備份的數(shù)據(jù),在減少占用資源的同時保證當前的備份數(shù)據(jù)為最新的數(shù)據(jù)。
[0035]在一較佳實施例中,在通過備份數(shù)據(jù)對數(shù)據(jù)庫進行數(shù)據(jù)庫恢復時,將備份數(shù)據(jù)逐條寫入數(shù)據(jù)庫,防止設備宕機時丟失過多數(shù)據(jù),例如可通過shell腳本進行配置,配置sync_binlog限定每次同步進磁盤的語句條數(shù)。
[0036]在一較佳實施例中,還可包括在主備板初始化時分別對其數(shù)據(jù)庫進行主鍵自增起始值和偏移量設置的步驟,在設備初始化時配置數(shù)據(jù)庫雙向同步,shell腳本下可設置auto_increment_offset偏移量和auto_increment_increment自增量防止自增主鍵在同步過程中產(chǎn)生沖突;
[0037]例如,自增主鍵設置為:
[0038]auto_increment_offset=l, auto_increment_increment=2 ;
[0039]數(shù)據(jù)同步設置為:
[0040]auto_increment_off set=2, auto_increment_increment=2 ;
[0041]則可防止自增主鍵在同步過程中產(chǎn)生沖突。
[0042]接下來通過一具體實施例詳細闡述本發(fā)明,如圖3所示,示出了其中一種實現(xiàn)本發(fā)明的邏輯框圖。
[0043]步驟1:配置數(shù)據(jù)庫雙向同步。需要配置設置auto_increment_offset偏移量和auto_increment_increment自增量防止自增主鍵在同步過程中產(chǎn)生沖突,并配置sync_binlog限定每次同步進磁盤的語句條數(shù),同時配置每天3點鐘時對數(shù)據(jù)庫進行備份。
[0044]步驟2:循環(huán)檢測,判斷A機是否重啟,如果A機重啟了,去到步驟3 ;否則去到步驟7。
[0045]步驟3:如果檢測到A機重啟過,則以B機的數(shù)據(jù)庫數(shù)據(jù)為準。
[0046]步驟4:判斷B機是否也是開機重啟過,如果是,去到步驟5 ;否則去到步驟6。
[0047]步驟5:如果A,B兩機同時重啟或者被整機斷電過,此時無法預知那邊數(shù)據(jù)是正確的,本發(fā)明采用恢復成每天早上3點鐘備份的那份數(shù)據(jù)庫。當然,這里有不同的解決方法,為了更準確,也可以每小時做一次數(shù)據(jù)庫備份,兩機同時宕機時,以前一次備份的數(shù)據(jù)庫為準進行恢復,去到步驟10。
[0048]步驟6:A宕機,B正常工作,此時以B機數(shù)據(jù)庫數(shù)據(jù)為準進行恢復,去到步驟10。
[0049]步驟7:如果A機未重啟,則數(shù)據(jù)庫數(shù)據(jù)以A機的為準,去到步驟8。
[0050]步驟8:檢測B機是否重啟過,如果B機重啟了,則去到步驟9 ;否則,去到步驟10。
[0051]步驟9:以A機數(shù)據(jù)庫數(shù)據(jù)為準進行數(shù)據(jù)庫恢復,去到步驟10。
[0052]步驟10:循環(huán)檢測A,B兩機同步狀態(tài),一般來說,異常只出現(xiàn)在宕機的時候,正常情況下A,B兩機應該是同步狀態(tài)的。[0053]在異常掉電的情況下,Mysql有較小幾率出現(xiàn)無法提供正常服務的情況。本發(fā)明對于這種情況的處理方式為:在開機的時候檢測Mysql的服務狀態(tài),如果服務狀態(tài)異常,則需要重新安裝數(shù)據(jù)庫,并以數(shù)據(jù)庫服務正常的那邊數(shù)據(jù)庫為準進行恢復,如果兩邊數(shù)據(jù)庫服務都不正常,則回退到3點鐘的數(shù)據(jù)庫數(shù)據(jù),并進行同步配置。
[0054]如圖4所示,是本發(fā)明一種主備板的數(shù)據(jù)庫雙向同步系統(tǒng)的結(jié)構(gòu)示意圖,包括:
[0055]備份模塊41,用于根據(jù)預設的時間周期分別對主備板的數(shù)據(jù)庫進行備份,得到對應的備份數(shù)據(jù);
[0056]在本步驟中,可根據(jù)主備板的工作狀態(tài),設定在網(wǎng)關(guān)較為空閑的時候分別對主備板的數(shù)據(jù)庫進行備份;或者也可設定更為頻繁的備份方式,如每小時進行一次數(shù)據(jù)庫備份;如果板卡同時重啟并且重啟后數(shù)據(jù)庫服務都不正常,則通過備份的數(shù)據(jù)進行恢復;主備板備份的數(shù)據(jù)分別存儲在各自對應的數(shù)據(jù)庫中。
[0057]檢測模塊42,用于檢測主備板的運行狀態(tài);
[0058]恢復模塊43,用于若主備板都重啟過,則主備板的數(shù)據(jù)庫分別通過其備份數(shù)據(jù)進行數(shù)據(jù)恢復;
[0059]板卡系統(tǒng)若重啟或者掉電,數(shù)據(jù)庫雙向同步就會產(chǎn)生不可預知的異常,這部分異常產(chǎn)生的主要原因源于對數(shù)據(jù)庫的操作日志沒辦法即時寫入磁盤和網(wǎng)絡傳輸過程中的丟失。另外在異常宕機時,甚至可能產(chǎn)生數(shù)據(jù)庫崩潰的嚴重情況,而網(wǎng)關(guān)HA切換過程,就經(jīng)常涉及到掉電重啟等情況;
[0060]在本實施例中,循環(huán)檢測主備板的運行狀態(tài),當主板與備板都重啟過時,由于兩板同時重啟或者被整機斷電過,無法預知哪一個板卡的數(shù)據(jù)是正確的,因此兩機同時宕機時,以備份的數(shù)據(jù)分別對數(shù)據(jù)庫進行數(shù)據(jù)恢復,保證主備板數(shù)據(jù)同步。
[0061]在一較佳實施例中,還可包括:
[0062]主板恢復模塊,用于若主板重啟過,備板未重啟,則以備板的數(shù)據(jù)庫對主板的數(shù)據(jù)庫進行恢復;
[0063]備板恢復模塊,用于若主板未重啟,備板重啟過,并且備板的數(shù)據(jù)庫與主板的數(shù)據(jù)庫不同步,則以主板的數(shù)據(jù)庫對備板的數(shù)據(jù)庫進行數(shù)據(jù)恢復;
[0064]在本實施例中,主板重啟過,則主板數(shù)據(jù)庫的數(shù)據(jù)可能發(fā)生異常,需恢復主板數(shù)據(jù)庫的數(shù)據(jù);由于備板未重啟過,其數(shù)據(jù)庫運行正常,以備板當前數(shù)據(jù)庫的數(shù)據(jù)對主板的數(shù)據(jù)庫進行恢復;
[0065]備板重啟,則檢測雙機數(shù)據(jù)庫的同步狀態(tài),若備板數(shù)據(jù)庫與主板數(shù)據(jù)庫的數(shù)據(jù)不同步,則以主板的數(shù)據(jù)庫對備板的數(shù)據(jù)庫進行數(shù)據(jù)恢復;若同步,則不進行備板數(shù)據(jù)庫恢復操作。
[0066]在一較佳實施例中,可在根據(jù)預設的時間周期對數(shù)據(jù)庫進行備份時,將當前備份的數(shù)據(jù)覆蓋上一次備份的數(shù)據(jù),在減少占用資源的同時保證當前的備份數(shù)據(jù)為最新的數(shù)據(jù)。
[0067]在一較佳實施例中,可在通過備份數(shù)據(jù)對數(shù)據(jù)庫進行數(shù)據(jù)庫恢復時,將備份數(shù)據(jù)逐條寫入數(shù)據(jù)庫,防止設備宕機時丟失過多數(shù)據(jù),例如可通過shell腳本進行配置,配置sync_binlog限定每次同步進磁盤的語句條數(shù)。
[0068]在一較佳實施例中,還可包括設置模塊,用于根據(jù)預設值在主備板初始化時分別對數(shù)據(jù)庫的主鍵自增起始值和偏移量進行設置,在設備初始化時配置數(shù)據(jù)庫雙向同步,shell 腳本下可設置auto_increment_offset 偏移量和 auto_increment_increment 自增量防止自增主鍵在同步過程中產(chǎn)生沖突。
[0069]本發(fā)明主備板的數(shù)據(jù)庫雙向同步方法和系統(tǒng),根據(jù)主備板的工作狀態(tài),設定在網(wǎng)關(guān)較為空閑的時候分別對主備板的數(shù)據(jù)庫進行備份,如果板卡同時重啟并且重啟后數(shù)據(jù)庫服務都不正常,則通過備份的數(shù)據(jù)進行恢復,保證在主備板同時運行異常時仍能保持數(shù)據(jù)同步;若是其中一板重啟,則根據(jù)兩板重啟后的數(shù)據(jù)庫狀態(tài)確定數(shù)據(jù)恢復操作;本發(fā)明實現(xiàn)過程簡單,能良好的保證數(shù)據(jù)庫同步狀態(tài)正確,解決了主備板運行異常時的數(shù)據(jù)同步難題。
[0070]以上所述實施例僅表達了本發(fā)明的幾種實施方式,其描述較為具體和詳細,但并不能因此而理解為對本發(fā)明專利范圍的限制。應當指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進,這些都屬于本發(fā)明的保護范圍。因此,本發(fā)明專利的保護范圍應以所附權(quán)利要求為準。
【權(quán)利要求】
1.一種主備板的數(shù)據(jù)庫雙向同步方法,其特征在于,包括如下步驟: 根據(jù)預設的時間周期分別對主備板的數(shù)據(jù)庫進行備份,得到對應的備份數(shù)據(jù); 檢測主備板的運行狀態(tài); 若主備板都重啟過,則主備板的數(shù)據(jù)庫分別通過其備份數(shù)據(jù)進行數(shù)據(jù)恢復。
2.根據(jù)權(quán)利要求1所述的主備板的數(shù)據(jù)庫雙向同步方法,其特征在于,還包括步驟: 若主板重啟過,備板未重啟,則以備板的數(shù)據(jù)庫對主板的數(shù)據(jù)庫進行恢復; 若主板未重啟,備板重啟過,并且備板的數(shù)據(jù)庫與主板的數(shù)據(jù)庫不同步,則以主板的數(shù)據(jù)庫對備板的數(shù)據(jù)庫進行數(shù)據(jù)恢復。
3.根據(jù)權(quán)利要求1所述的主備板的數(shù)據(jù)庫雙向同步方法,其特征在于,在根據(jù)預設的時間周期對數(shù)據(jù)庫進行備份時,將當前備份的數(shù)據(jù)覆蓋上一次備份的數(shù)據(jù)。
4.根據(jù)權(quán)利要求1或2所述的主備板的數(shù)據(jù)庫雙向同步方法,其特征在于,在通過備份數(shù)據(jù)對數(shù)據(jù)庫進行數(shù)據(jù)庫恢復時,將備份數(shù)據(jù)逐條寫入數(shù)據(jù)庫。
5.根據(jù)權(quán)利要求1所述的主備板的數(shù)據(jù)庫雙向同步方法,其特征在于,還包括根據(jù)預設值在主備板初始化時分別對其數(shù)據(jù)庫進行主鍵自增起始值和偏移量設置的步驟。
6.一種主備板的數(shù)據(jù)庫雙向同步系統(tǒng),其特征在于,包括: 備份模塊,用于根據(jù)預設的時間周期分別對主備板的數(shù)據(jù)庫進行備份,得到對應的備份數(shù)據(jù); 檢測模塊,用于檢測主備板的運行狀態(tài); 恢復模塊,用于若主備板都重啟過,則主備板的數(shù)據(jù)庫分別通過其備份數(shù)據(jù)進行數(shù)據(jù)恢復。
7.根據(jù)權(quán)利要求6所述的主備板的數(shù)據(jù)庫雙向同步系統(tǒng),其特征在于,還包括: 主板恢復模塊,用于若主板重啟過,備板未重啟,則以備板的數(shù)據(jù)庫對主板的數(shù)據(jù)庫進行恢復; 備板恢復模塊,用于若主板未重啟,備板重啟過,并且備板的數(shù)據(jù)庫與主板的數(shù)據(jù)庫不同步,則以主板的數(shù)據(jù)庫對備板的數(shù)據(jù)庫進行數(shù)據(jù)恢復。
8.根據(jù)權(quán)利要求6所述的主備板的數(shù)據(jù)庫雙向同步系統(tǒng),其特征在于,在根據(jù)預設的時間周期對數(shù)據(jù)庫進行備份時,將當前備份的數(shù)據(jù)覆蓋上一次備份的數(shù)據(jù)。
9.根據(jù)權(quán)利要求6或7所述的主備板的數(shù)據(jù)庫雙向同步系統(tǒng),其特征在于,在通過備份數(shù)據(jù)對數(shù)據(jù)庫進行數(shù)據(jù)庫恢復時,將備份數(shù)據(jù)逐條寫入數(shù)據(jù)庫。
10.根據(jù)權(quán)利要求6所述的主備板的數(shù)據(jù)庫雙向同步系統(tǒng),其特征在于,還包括設置模塊,用于根據(jù)預設值在主備板初始化時分別對數(shù)據(jù)庫的主鍵自增起始值和偏移量進行設置。
【文檔編號】G06F17/30GK103488721SQ201310416525
【公開日】2014年1月1日 申請日期:2013年9月12日 優(yōu)先權(quán)日:2013年9月12日
【發(fā)明者】吳志鵬, 李高朋, 劉志勇, 鄧梅娟, 姚舜, 譚廷柱, 徐胤 申請人:京信通信系統(tǒng)(中國)有限公司