本發(fā)明涉及數(shù)據(jù)庫領(lǐng)域,特別涉及一種數(shù)據(jù)庫主備切換的方法及裝置。
背景技術(shù):
在現(xiàn)今數(shù)據(jù)庫應(yīng)用中,數(shù)據(jù)庫并發(fā)度高、數(shù)據(jù)增長速度快是當今數(shù)據(jù)庫業(yè)務(wù)兩大特點。在短時間內(nèi),可能存在大量數(shù)據(jù)新增或修改。隨著數(shù)據(jù)數(shù)量級遞增,從字節(jié)、千字節(jié)、兆字節(jié)到現(xiàn)在的萬兆字節(jié),結(jié)合數(shù)據(jù)庫良好橫向擴展特性,基于數(shù)據(jù)庫的分布式數(shù)據(jù)庫得到了廣泛的應(yīng)用。同時為了提高數(shù)據(jù)庫容災(zāi)性,各數(shù)據(jù)庫提供商均提出了相應(yīng)策略,其中主從復(fù)制策略,其核心理念是主數(shù)據(jù)庫對外提供服務(wù),從數(shù)據(jù)庫每隔一段時間讀取主數(shù)據(jù)庫運行所生成二進制日志,并執(zhí)行二進制日志中相關(guān)動作,從而保證主從數(shù)據(jù)庫數(shù)據(jù)一致。當數(shù)據(jù)庫主機出現(xiàn)宕機,需要在較短時間內(nèi)恢復(fù)應(yīng)用,就需要使用從機來充當主數(shù)據(jù)庫(即主備切換),如何判斷從機數(shù)據(jù)庫和主機數(shù)據(jù)庫數(shù)據(jù)是否一致,如何在較短時間內(nèi)將主從機數(shù)據(jù)庫數(shù)據(jù)恢復(fù)成一致,成為業(yè)界的一個技術(shù)難題。
主從復(fù)制是備機復(fù)制主機二進制日志,由于存在主機寫日志時延和網(wǎng)絡(luò)通訊時延等因素,因此必然存在主備日志不同步的現(xiàn)象。而當前業(yè)界仍未有自動化比較數(shù)據(jù)庫主備機數(shù)據(jù)一致性的工具,只能通過人工執(zhí)行數(shù)據(jù)庫語句了解主備機數(shù)據(jù)是否一致,當主機宕機而需要做主備切換時更是只能通過查看數(shù)據(jù)庫二進制日志方能確定主備二進制日志差異情況,人工從主機中將相應(yīng)日志提取出來,還原成相應(yīng)數(shù)據(jù)庫語句并插入到備機執(zhí)行,方能實現(xiàn)主備機的數(shù)據(jù)同步。此過程十分繁瑣,且人工成本較高、反應(yīng)速度慢、出錯率高。
技術(shù)實現(xiàn)要素:
本發(fā)明提供了一種數(shù)據(jù)庫主備切換的方法及裝置,其目的是為了解決數(shù)據(jù)庫主備切換過程繁瑣,且人工成本較高、反應(yīng)速度慢、出錯率高的問題。
為了達到上述目的,本發(fā)明的實施例提供了一種數(shù)據(jù)庫主備切換的方法,應(yīng)用于管理服務(wù)器,包括:
監(jiān)測作為當前主數(shù)據(jù)庫的第一數(shù)據(jù)庫的運行,當檢測到所述第一數(shù)據(jù)庫運行異常時,向作為當前備數(shù)據(jù)庫的第二數(shù)據(jù)庫發(fā)送備切主請求;
獲取當所述第二數(shù)據(jù)庫檢測所述第二數(shù)據(jù)庫和所述第一數(shù)據(jù)庫中的數(shù)據(jù)一致,所述第二數(shù)據(jù)庫成功切換為當前主數(shù)據(jù)庫時上報的反饋數(shù)據(jù),根據(jù)所述反饋數(shù)據(jù)獲取所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)庫同步的數(shù)據(jù)切換信息;
向所述第一數(shù)據(jù)庫發(fā)送包含所述數(shù)據(jù)切換信息的主切備請求,使所述第一數(shù)據(jù)庫根據(jù)所述數(shù)據(jù)切換信息判斷同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)不存在數(shù)據(jù)丟失時,切換為當前備數(shù)據(jù)庫。
進一步地,所述監(jiān)測作為當前主數(shù)據(jù)庫的第一數(shù)據(jù)庫的運行的步驟包括:
獲取所述第一數(shù)據(jù)庫定期上報的心跳信息,當間隔預(yù)定時間未接收到所述心跳信息時,則確定所述第一數(shù)據(jù)庫運行異常。
進一步,當檢測到所述第一數(shù)據(jù)庫運行異常時的步驟之后,所述方法還包括:
根據(jù)最后一次所述第一數(shù)據(jù)庫上報的心跳信息,獲取所述第一數(shù)據(jù)庫中用于記錄數(shù)據(jù)執(zhí)行動作的當前二進制日志位置第一位置;
其中,在向所述第二數(shù)據(jù)庫發(fā)送備切主請求的同時,將所述第一數(shù)據(jù)庫的當前二進制日志位置第一位置發(fā)送至所述第二數(shù)據(jù)庫。
進一步地,根據(jù)所述反饋數(shù)據(jù)獲取所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)庫同步的數(shù)據(jù)切換信息的步驟中:
根據(jù)所述反饋數(shù)據(jù)獲取所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)同步的二進制日志位置第二位置;
其中,在向所述第一數(shù)據(jù)庫發(fā)送主切備請求的同時,將所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)庫同步的二進制日志位置第二位置發(fā)送至所述第一數(shù)據(jù)庫。
進一步地,根據(jù)最后一次所述第一數(shù)據(jù)庫上報的心跳信息,獲取所述第一數(shù)據(jù)庫中用于記錄數(shù)據(jù)執(zhí)行動作的當前二進制日志位置第一位置的步驟具體包括:
獲取最后一次所述心跳信息中記錄數(shù)據(jù)執(zhí)行動作的二進制日志位置第三 位置;
檢測和所述第一數(shù)據(jù)庫之間的鏈接是否存在:
若存在,則向所述第一數(shù)據(jù)庫發(fā)送獲取當前二進制日志位置的請求,從所述第一數(shù)據(jù)庫的反饋消息中獲取當前二進制日志位置第一位置;若不存在,則將最后一次所述心跳信息中記錄數(shù)據(jù)執(zhí)行動作的二進制日志位置第三位置標記為當前二進制日志位置第一位置。
本發(fā)明的實施例還提供了一種數(shù)據(jù)庫主備切換的方法,應(yīng)用于作為當前主數(shù)據(jù)庫的第一數(shù)據(jù)庫,包括:
接收一管理服務(wù)器檢測所述第一數(shù)據(jù)庫運行異常時發(fā)送的主切備請求;
從所述主切備請求中獲取作為當前備數(shù)據(jù)庫的第二數(shù)據(jù)庫切換為主數(shù)據(jù)庫時,最后從所述第一數(shù)據(jù)庫同步的數(shù)據(jù)切換信息;
根據(jù)所述數(shù)據(jù)切換信息判斷同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)是否存在丟失,當判斷數(shù)據(jù)未存在丟失時,則切換為當前備數(shù)據(jù)庫;當判斷數(shù)據(jù)存在丟失時,提示切換失敗。
進一步地,所述接收一管理服務(wù)器檢測所述第一數(shù)據(jù)庫運行異常時發(fā)送的主切備請求的步驟之前,所述方法還包括:
定期向所述管理服務(wù)器上報心跳信息,使所述管理服務(wù)器根據(jù)所述心跳信息檢測所述第一數(shù)據(jù)庫是否運行異常。
進一步地,所述從所述主切備請求中獲取作為當前備數(shù)據(jù)庫的第二數(shù)據(jù)庫切換為主數(shù)據(jù)庫時,最后從所述第一數(shù)據(jù)庫同步的數(shù)據(jù)切換信息的步驟中:
從所述主切備請求中獲取所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)庫同步的二進制日志位置第二位置。
進一步地,所述根據(jù)所述數(shù)據(jù)切換信息判斷同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)是否存在丟失的步驟,包括:獲取所述第一數(shù)據(jù)庫恢復(fù)正常心跳后的二進制日志位置第四位置;
將所述第四位置與所述第二位置進行比較,若所述第四位置小于等于所述第二位置,則確定同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)未存在丟失,切換為當前備數(shù)據(jù)庫;若所述第四位置大于所述第二位置,則確定同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)存在丟失,與所述第一數(shù)據(jù)庫的數(shù)據(jù)存在差異,提示切換失敗。
進一步地,所述當判斷數(shù)據(jù)存在丟失時,提示切換失敗的步驟之后,所述方法還包括:
檢測所述第一數(shù)據(jù)庫和所述第二數(shù)據(jù)庫之間差異化SQL腳本的開始文件;
所述第一數(shù)據(jù)庫的數(shù)據(jù)中,從二進制日志位置第二位置開始遍歷,直至所有日志文件,生成各事務(wù)的SQL語句,并重定向到目標文本文件。
本發(fā)明的實施例還提供了一種數(shù)據(jù)庫主備切換的方法,應(yīng)用于作為當前備數(shù)據(jù)庫的第二數(shù)據(jù)庫,包括:
獲取管理服務(wù)器當監(jiān)測到作為當前主數(shù)據(jù)庫的第一數(shù)據(jù)庫異常時發(fā)送的備切主請求;
從所述備切主請求中獲取所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息,與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息進行比較,判斷數(shù)據(jù)是否一致;當數(shù)據(jù)一致時,則切換為當前主數(shù)據(jù)庫,當數(shù)據(jù)不一致時,提示切換至當前主數(shù)據(jù)庫失敗。
進一步地,從所述備切主請求中獲取所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息,與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息進行比較的步驟包括:
從所述備切主請求中獲取所述第一數(shù)據(jù)庫的當前二進制日志位置第一位置;
獲取所述第二數(shù)據(jù)庫從所述第一數(shù)據(jù)庫復(fù)制數(shù)據(jù)的當前二進制日志位置第五位置;
將所述第一位置與所述第五位置進行比較,若所述第一位置等于所述第五位置,則確定所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息的數(shù)據(jù)一致,切換為當前主數(shù)據(jù)庫;若所述第一位置小于所述第五位置,則確定所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息不一致,提示切換至當前主數(shù)據(jù)庫失敗。
本發(fā)明的實施例還提供了一種數(shù)據(jù)庫主備切換的裝置,應(yīng)用于管理服務(wù)器,所述裝置包括:
監(jiān)測模塊,用于監(jiān)測作為當前主數(shù)據(jù)庫的第一數(shù)據(jù)庫的運行,當檢測到所述第一數(shù)據(jù)庫運行異常時,向作為當前備數(shù)據(jù)庫的第二數(shù)據(jù)庫發(fā)送備切主請求;
第一獲取模塊,用于獲取當所述第二數(shù)據(jù)庫檢測所述第二數(shù)據(jù)庫和所述第一數(shù)據(jù)庫中的數(shù)據(jù)一致,所述第二數(shù)據(jù)庫成功切換為當前主數(shù)據(jù)庫時上報的反 饋數(shù)據(jù),根據(jù)所述反饋數(shù)據(jù)獲取所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)庫同步的數(shù)據(jù)切換信息;
第一數(shù)據(jù)發(fā)送模塊,用于向所述第一數(shù)據(jù)庫發(fā)送包含所述數(shù)據(jù)切換信息的主切備請求,使所述第一數(shù)據(jù)庫根據(jù)所述數(shù)據(jù)切換信息判斷同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)不存在數(shù)據(jù)丟失時,切換為當前備數(shù)據(jù)庫。
進一步地,所述監(jiān)測模塊包括:
第一監(jiān)測子模塊,用于獲取所述第一數(shù)據(jù)庫定期上報的心跳信息,當間隔預(yù)定時間未接收到所述心跳信息時,則確定所述第一數(shù)據(jù)庫運行異常。
進一步地,所述裝置還包括:
第一日志獲取模塊,用于根據(jù)最后一次所述第一數(shù)據(jù)庫上報的心跳信息,獲取所述第一數(shù)據(jù)庫中用于記錄數(shù)據(jù)執(zhí)行動作的當前二進制日志位置第一位置;
其中,所述監(jiān)測模塊在向所述第二數(shù)據(jù)庫發(fā)送備切主請求的同時,將所述第一數(shù)據(jù)庫的當前二進制日志位置第一位置發(fā)送至所述第二數(shù)據(jù)庫。
進一步地,所述第一獲取模塊包括:
第一日志獲取單元,用于根據(jù)所述反饋數(shù)據(jù)獲取所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)同步的二進制日志位置第二位置;
其中,所述第一數(shù)據(jù)發(fā)送模塊在向所述第一數(shù)據(jù)庫發(fā)送主切備請求的同時,將所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)庫同步的二進制日志位置第二位置發(fā)送至所述第一數(shù)據(jù)庫。
進一步地,所述第一日志獲取模塊還包括:
第二日志獲取單元,用于獲取最后一次所述心跳信息中記錄數(shù)據(jù)執(zhí)行動作的二進制日志位置第三位置;
第一檢測單元,用于檢測和所述第一數(shù)據(jù)庫之間的鏈接是否存在:
若存在,則向所述第一數(shù)據(jù)庫發(fā)送獲取當前二進制日志位置的請求,從所述第一數(shù)據(jù)庫的反饋消息中獲取當前二進制日志位置第一位置;若不存在,則將最后一次所述心跳信息中記錄數(shù)據(jù)執(zhí)行動作的二進制日志位置第三位置標記為當前二進制日志位置第一位置。
進一步地,應(yīng)用于作為當前主數(shù)據(jù)庫的第一數(shù)據(jù)庫,所述裝置包括:
第一接收模塊,用于接收一管理服務(wù)器檢測所述第一數(shù)據(jù)庫運行異常時發(fā)送的主切備請求;
第二獲取模塊,用于從所述主切備請求中獲取作為當前備數(shù)據(jù)庫的第二數(shù)據(jù)庫切換為主數(shù)據(jù)庫時,最后從所述第一數(shù)據(jù)庫同步的數(shù)據(jù)切換信息;
第一判別模塊,用于根據(jù)所述數(shù)據(jù)切換信息判斷同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)是否存在丟失,當判斷數(shù)據(jù)未存在丟失時,則切換為當前備數(shù)據(jù)庫;當判斷數(shù)據(jù)存在丟失時,提示切換失敗。
進一步地,所述第一接收模塊包括:
第一上報子模塊,用于定期向所述管理服務(wù)器上報心跳信息,使所述管理服務(wù)器根據(jù)所述心跳信息檢測所述第一數(shù)據(jù)庫是否運行異常。
進一步地,所述第二獲取模塊包括:
第一獲取子模塊,用于從所述主切備請求中獲取所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)庫同步的二進制日志位置第二位置。
進一步地,所述第一判別模塊包括:
第二獲取子模塊,用于獲取所述第一數(shù)據(jù)庫恢復(fù)正常心跳后的二進制日志位置第四位置;
第一判別子模塊,用于將所述第四位置與所述第二位置進行比較,若所述第四位置小于等于所述第二位置,則確定同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)未存在丟失,切換為當前備數(shù)據(jù)庫;若所述第四位置大于所述第二位置,則確定同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)存在丟失,與所述第一數(shù)據(jù)庫的數(shù)據(jù)存在差異,提示切換失敗。
進一步地,所述裝置還包括:
第一檢測模塊,用于檢測所述第一數(shù)據(jù)庫和所述第二數(shù)據(jù)庫之間差異化SQL腳本的開始文件;
第一生成模塊,用于從所述第一數(shù)據(jù)庫的數(shù)據(jù)中,從二進制日志位置第二位置開始遍歷,直至所有日志文件,生成各事務(wù)的SQL語句,并重定向到目標文本文件。
本發(fā)明的實施例提供了一種數(shù)據(jù)庫主備切換的裝置,應(yīng)用于作為當前備數(shù)據(jù)庫的第二數(shù)據(jù)庫,所述裝置包括:
第三獲取模塊,用于獲取管理服務(wù)器當監(jiān)測到作為當前主數(shù)據(jù)庫的第一數(shù)據(jù)庫異常時發(fā)送的備切主請求;
第二判別模塊,用于從所述備切主請求中獲取所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息,與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息進行比較,判斷數(shù)據(jù)是否一致;當數(shù)據(jù)一致時,則切換為當前主數(shù)據(jù)庫,當數(shù)據(jù)不一致時,提示切換至當前主數(shù)據(jù)庫失敗。
進一步地,所述第二判別模塊包括:
第三獲取子模塊,用于從所述備切主請求中獲取所述第一數(shù)據(jù)庫的當前二進制日志位置第一位置;
第四獲取子模塊,用于獲取所述第二數(shù)據(jù)庫從所述第一數(shù)據(jù)庫復(fù)制數(shù)據(jù)的當前二進制日志位置第五位置;
第二判別子模塊,用于將所述第一位置與所述第五位置進行比較,若所述第一位置等于所述第五位置,則確定所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息的數(shù)據(jù)一致,切換為當前主數(shù)據(jù)庫;若所述第一位置小于所述第五位置,則確定所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息不一致,提示切換至當前主數(shù)據(jù)庫失敗。
本發(fā)明的上述方案至少包括以下有益效果:
本發(fā)明提供的數(shù)據(jù)庫主備切換的方法及裝置,可以有效地識別主備機數(shù)據(jù)庫不一致,并進行主備切換;通過主機數(shù)據(jù)庫不斷向備機數(shù)據(jù)庫同步二進制日志,可有效的保證主備切換過程中主備數(shù)據(jù)庫的數(shù)據(jù)一致性以及切換的準確性;整個切換過程不需要人工參與,節(jié)省了人工成本,且反應(yīng)速度快,出錯率低。
附圖說明
圖1為本發(fā)明的實施例所述的主備切換的架構(gòu)圖;
圖2為本發(fā)明的實施例所述的主備切換的流程圖;
圖3為本發(fā)明實施例所述的應(yīng)用管理服務(wù)器的主備切換方法的流程圖;
圖4為本發(fā)明實施例所述的應(yīng)用于管理服務(wù)器的主備切換的裝置的示意圖;
圖5為本發(fā)明實施例所述的應(yīng)用于當前作為主數(shù)據(jù)庫的第一數(shù)據(jù)庫的主 備切換方法的流程圖;
圖6為本發(fā)明實施例所述的應(yīng)用于當前作為主數(shù)據(jù)庫的第一數(shù)據(jù)庫的主備切換的裝置的示意圖;
圖7為本發(fā)明實施例所述的應(yīng)用于當前作為備數(shù)據(jù)庫的第二數(shù)據(jù)庫的主備切換方法的流程圖;
圖8為本發(fā)明實施例所述的應(yīng)用于當前作為備數(shù)據(jù)庫的第二數(shù)據(jù)庫的主備切換的裝置的示意圖。
具體實施方式
為使本發(fā)明要解決的技術(shù)問題、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖及具體實施例進行詳細描述。
參見圖1,本發(fā)明提供了一種數(shù)據(jù)庫主備切換的方法及裝置,其目的是為了解決數(shù)據(jù)庫主備切換過程繁瑣,且人工成本較高、反應(yīng)速度慢、出錯率高的問題,其中,管理服務(wù)器通過控制流與第一數(shù)據(jù)庫以及第二數(shù)據(jù)庫之間進行交互,第一數(shù)據(jù)庫以及第二數(shù)據(jù)庫向所述管理服務(wù)器上報心跳消息,以及管理服務(wù)器向第一數(shù)據(jù)庫以及第二數(shù)據(jù)庫發(fā)送主備切換請求;第一數(shù)據(jù)庫以及第二數(shù)據(jù)庫之間通過數(shù)據(jù)流進行交互,第二數(shù)據(jù)庫同步第一數(shù)據(jù)庫的心跳消息。
參見圖3,本發(fā)明的實施例提供了一種數(shù)據(jù)庫主備切換的方法,應(yīng)用于管理服務(wù)器,包括:
步驟11,監(jiān)測作為當前主數(shù)據(jù)庫的第一數(shù)據(jù)庫的運行,當檢測到所述第一數(shù)據(jù)庫運行異常時,向作為當前備數(shù)據(jù)庫的第二數(shù)據(jù)庫發(fā)送備切主請求;
進一步地,步驟11中所述監(jiān)測作為當前主數(shù)據(jù)庫的第一數(shù)據(jù)庫的運行的步驟包括:
獲取所述第一數(shù)據(jù)庫定期上報的心跳信息,當間隔預(yù)定時間未接收到所述心跳信息時,則確定所述第一數(shù)據(jù)庫運行異常;
當檢測到所述第一數(shù)據(jù)庫運行異常時的步驟之后,根據(jù)最后一次所述第一數(shù)據(jù)庫上報的心跳信息,獲取所述第一數(shù)據(jù)庫中用于記錄數(shù)據(jù)執(zhí)行動作的當前二進制日志位置第一位置;
其中,在向所述第二數(shù)據(jù)庫發(fā)送備切主請求的同時,將所述第一數(shù)據(jù)庫的 當前二進制日志位置第一位置發(fā)送至所述第二數(shù)據(jù)庫。
在本發(fā)明的具體實施例中,根據(jù)最后一次所述第一數(shù)據(jù)庫上報的心跳信息,獲取所述第一數(shù)據(jù)庫中用于記錄數(shù)據(jù)執(zhí)行動作的當前二進制日志位置第一位置的步驟具體包括:
獲取最后一次所述心跳信息中記錄數(shù)據(jù)執(zhí)行動作的二進制日志位置第三位置;
檢測和所述第一數(shù)據(jù)庫之間的鏈接是否存在:
若存在,則向所述第一數(shù)據(jù)庫發(fā)送獲取當前二進制日志位置的請求,從所述第一數(shù)據(jù)庫的反饋消息中獲取當前二進制日志位置第一位置;若不存在,則將最后一次所述心跳信息中記錄數(shù)據(jù)執(zhí)行動作的二進制日志位置第三位置標記為當前二進制日志位置第一位置。
步驟12,獲取當所述第二數(shù)據(jù)庫檢測所述第二數(shù)據(jù)庫和所述第一數(shù)據(jù)庫中的數(shù)據(jù)一致,所述第二數(shù)據(jù)庫成功切換為當前主數(shù)據(jù)庫時上報的反饋數(shù)據(jù),根據(jù)所述反饋數(shù)據(jù)獲取所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)庫同步的數(shù)據(jù)切換信息;
在本發(fā)明的具體實施例中,步驟12中根據(jù)所述反饋數(shù)據(jù)獲取所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)庫同步的數(shù)據(jù)切換信息的步驟中:
根據(jù)所述反饋數(shù)據(jù)獲取所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)同步的二進制日志位置第二位置;
其中,在向所述第一數(shù)據(jù)庫發(fā)送主切備請求的同時,將所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)庫同步的二進制日志位置第二位置發(fā)送至所述第一數(shù)據(jù)庫。
步驟13,向所述第一數(shù)據(jù)庫發(fā)送包含所述數(shù)據(jù)切換信息的主切備請求,使所述第一數(shù)據(jù)庫根據(jù)所述數(shù)據(jù)切換信息判斷同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)不存在數(shù)據(jù)丟失時,切換為當前備數(shù)據(jù)庫。
參見圖2,在本發(fā)明的具體實施例中,所述當前作為主數(shù)據(jù)庫的第一數(shù)據(jù)庫定期向所述管理服務(wù)器上報心跳消息,所述管理服務(wù)器從所述心跳消息中獲取所述第一數(shù)據(jù)庫的二進制日志位置第一位置,當所述管理服務(wù)器間隔預(yù)定時間未接收到所述心跳信息時,則確定所述第一數(shù)據(jù)庫運行異常;
所述管理服務(wù)器獲取所述第一數(shù)據(jù)庫的二進制日志位置:獲取最后一次所 述心跳信息中記錄數(shù)據(jù)執(zhí)行動作的二進制日志位置第三位置;
檢測和所述第一數(shù)據(jù)庫之間的鏈接是否存在:若存在,從所述第一數(shù)據(jù)庫的反饋消息中獲取當前二進制日志位置第一位置;若不存在,則將最后一次所述心跳信息中記錄數(shù)據(jù)執(zhí)行動作的二進制日志位置第三位置標記為當前二進制日志位置第一位置。
所述管理服務(wù)器向作為當前備數(shù)據(jù)庫的第二數(shù)據(jù)庫發(fā)送備切主請求,所述第二數(shù)據(jù)庫接收到所述備切主請求之后,從所述備切主請求中獲取所述第一數(shù)據(jù)庫的當前二進制日志位置第一位置;獲取所述第二數(shù)據(jù)庫從所述第一數(shù)據(jù)庫復(fù)制數(shù)據(jù)的當前二進制日志位置第五位置;將所述第一位置與所述第五位置進行比較,若所述第一位置等于所述第五位置,則確定所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息的數(shù)據(jù)一致,切換為當前主數(shù)據(jù)庫,并將切換結(jié)果上報到所述管理服務(wù)器,同時將最后從所述第一數(shù)據(jù)庫同步的二進制日志位置第二位置上報到所述管理服務(wù)器;
若所述第一位置小于所述第五位置,則確定所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息不一致,提示切換至當前主數(shù)據(jù)庫失敗。
當所述管理服務(wù)器再次接收到所述第一數(shù)據(jù)庫的正常心跳時,所述第二數(shù)據(jù)庫獲取所述第一數(shù)據(jù)庫恢復(fù)正常心跳后的二進制日志位置第四位置,并將所述第四位置與所述第二位置進行比較,若所述第四位置小于等于所述第二位置,則確定同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)未存在丟失,切換為當前備數(shù)據(jù)庫;
若所述第四位置大于所述第二位置,則確定同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)存在丟失,與所述第一數(shù)據(jù)庫的數(shù)據(jù)存在差異,提示切換失??;在本發(fā)明的具體實施例之中,提示切換失敗的步驟之后,檢測所述第一數(shù)據(jù)庫和所述第二數(shù)據(jù)庫之間差異化SQL腳本的開始文件;
所述第一數(shù)據(jù)庫的數(shù)據(jù)中,從二進制日志位置第二位置開始遍歷,直至所有日志文件,生成各事務(wù)的SQL語句,并重定向到目標文本文件,所述第二數(shù)據(jù)庫執(zhí)行所述目標文本文件的SQL語句,再進行切換為當前備數(shù)據(jù)庫;若無法定向到目標文本文件,則表明所述第一數(shù)據(jù)庫和所述第二數(shù)據(jù)庫之間存在數(shù)據(jù)差異,無法恢復(fù)數(shù)據(jù)一致性,切換失敗;本發(fā)明通過主機數(shù)據(jù)庫不斷向備機數(shù)據(jù)庫同步二進制日志,可有效的保證主備切換過程中主備數(shù)據(jù)庫的數(shù)據(jù)一 致性以及切換的準確性;整個切換過程不需要人工參與,節(jié)省了人工成本,且反應(yīng)速度快,出錯率低。
參見圖4,本發(fā)明的實施例還提供了一種數(shù)據(jù)庫主備切換的裝置,應(yīng)用于管理服務(wù)器1,所述裝置包括:
監(jiān)測模塊11,用于監(jiān)測作為當前主數(shù)據(jù)庫的第一數(shù)據(jù)庫的運行,當檢測到所述第一數(shù)據(jù)庫運行異常時,向作為當前備數(shù)據(jù)庫的第二數(shù)據(jù)庫發(fā)送備切主請求;
第一獲取模塊12,用于獲取當所述第二數(shù)據(jù)庫檢測所述第二數(shù)據(jù)庫和所述第一數(shù)據(jù)庫中的數(shù)據(jù)一致,所述第二數(shù)據(jù)庫成功切換為當前主數(shù)據(jù)庫時上報的反饋數(shù)據(jù),根據(jù)所述反饋數(shù)據(jù)獲取所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)庫同步的數(shù)據(jù)切換信息;
第一數(shù)據(jù)發(fā)送模塊13,用于向所述第一數(shù)據(jù)庫發(fā)送包含所述數(shù)據(jù)切換信息的主切備請求,使所述第一數(shù)據(jù)庫根據(jù)所述數(shù)據(jù)切換信息判斷同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)不存在數(shù)據(jù)丟失時,切換為當前備數(shù)據(jù)庫。
進一步地,所述監(jiān)測模塊11包括:
第一監(jiān)測子模塊111,用于獲取所述第一數(shù)據(jù)庫定期上報的心跳信息,當間隔預(yù)定時間未接收到所述心跳信息時,則確定所述第一數(shù)據(jù)庫運行異常。
進一步地,所述裝置還包括:
第一日志獲取模塊14,用于根據(jù)最后一次所述第一數(shù)據(jù)庫上報的心跳信息,獲取所述第一數(shù)據(jù)庫中用于記錄數(shù)據(jù)執(zhí)行動作的當前二進制日志位置第一位置;
其中,所述監(jiān)測模塊11在向所述第二數(shù)據(jù)庫發(fā)送備切主請求的同時,將所述第一數(shù)據(jù)庫的當前二進制日志位置第一位置發(fā)送至所述第二數(shù)據(jù)庫。
進一步地,所述第一獲取模塊12包括:
第一日志獲取單元121,用于根據(jù)所述反饋數(shù)據(jù)獲取所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)同步的二進制日志位置第二位置;
其中,所述第一數(shù)據(jù)發(fā)送模塊在向所述第一數(shù)據(jù)庫發(fā)送主切備請求的同時,將所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)庫同步的二進制日志位置第二位置發(fā)送至所述第一數(shù)據(jù)庫。
進一步地,所述第一日志獲取模塊14還包括:
第二日志獲取單元141,用于獲取最后一次所述心跳信息中記錄數(shù)據(jù)執(zhí)行動作的二進制日志位置第三位置;
第一檢測單元,用于檢測和所述第一數(shù)據(jù)庫之間的鏈接是否存在:
若存在,則向所述第一數(shù)據(jù)庫發(fā)送獲取當前二進制日志位置的請求,從所述第一數(shù)據(jù)庫的反饋消息中獲取當前二進制日志位置第一位置;若不存在,則將最后一次所述心跳信息中記錄數(shù)據(jù)執(zhí)行動作的二進制日志位置第三位置標記為當前二進制日志位置第一位置。
需要說明的是,本發(fā)明實施例提供的應(yīng)用于管理服務(wù)器的數(shù)據(jù)庫主備切換的裝置是應(yīng)用上述應(yīng)用于管理服務(wù)器的數(shù)據(jù)庫主備切換的方法的裝置,即上述方法的所有實施例均適用于該裝置,且均能達到相同或相似的有益效果。
參見圖5,本發(fā)明的實施例還提供了一種數(shù)據(jù)庫主備切換的方法,應(yīng)用于作為當前主數(shù)據(jù)庫的第一數(shù)據(jù)庫,包括:
步驟21,接收一管理服務(wù)器檢測所述第一數(shù)據(jù)庫運行異常時發(fā)送的主切備請求;進一步地,步驟21之前,所述方法還包括:
定期向所述管理服務(wù)器上報心跳信息,使所述管理服務(wù)器根據(jù)所述心跳信息檢測所述第一數(shù)據(jù)庫是否運行異常。
步驟22,從所述主切備請求中獲取作為當前備數(shù)據(jù)庫的第二數(shù)據(jù)庫切換為主數(shù)據(jù)庫時,最后從所述第一數(shù)據(jù)庫同步的數(shù)據(jù)切換信息;進一步地,步驟22中包括:
從所述主切備請求中獲取所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)庫同步的二進制日志位置第二位置。
進一步地,所述根據(jù)所述數(shù)據(jù)切換信息判斷同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)是否存在丟失的步驟,包括:獲取所述第一數(shù)據(jù)庫恢復(fù)正常心跳后的二進制日志位置第四位置;
將所述第四位置與所述第二位置進行比較,若所述第四位置小于等于所述第二位置,則確定同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)未存在丟失,切換為當前備數(shù)據(jù)庫;若所述第四位置大于所述第二位置,則確定同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)存在丟失,與所述第一數(shù)據(jù)庫的數(shù)據(jù)存在差異,提示切換失敗。
步驟23,根據(jù)所述數(shù)據(jù)切換信息判斷同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)是否存在丟失,當判斷數(shù)據(jù)未存在丟失時,則切換為當前備數(shù)據(jù)庫;當判斷數(shù)據(jù)存在丟失時,提示切換失敗。
進一步地,步驟23中,當判斷數(shù)據(jù)存在丟失時,提示切換失敗的步驟之后,所述方法還包括:
檢測所述第一數(shù)據(jù)庫和所述第二數(shù)據(jù)庫之間差異化SQL腳本的開始文件;
所述第一數(shù)據(jù)庫的數(shù)據(jù)中,從二進制日志位置第二位置開始遍歷,直至所有日志文件,生成各事務(wù)的SQL語句,并重定向到目標文本文件。
參見圖6,本發(fā)明的實施例還提供了一種數(shù)據(jù)庫主備切換的裝置,應(yīng)用于作為當前主數(shù)據(jù)庫的第一數(shù)據(jù)庫,所述裝置包括:
第一接收模塊21,用于接收一管理服務(wù)器檢測所述第一數(shù)據(jù)庫運行異常時發(fā)送的主切備請求;進一步地,所述第一接收模塊21包括:
第一上報子模塊211,用于定期向所述管理服務(wù)器上報心跳信息,使所述管理服務(wù)器根據(jù)所述心跳信息檢測所述第一數(shù)據(jù)庫是否運行異常。
第二獲取模塊22,用于從所述主切備請求中獲取作為當前備數(shù)據(jù)庫的第二數(shù)據(jù)庫切換為主數(shù)據(jù)庫時,最后從所述第一數(shù)據(jù)庫同步的數(shù)據(jù)切換信息;進一步地,所述第二獲取模塊22包括:第一獲取子模塊221,用于從所述主切備請求中獲取所述第二數(shù)據(jù)庫最后從所述第一數(shù)據(jù)庫同步的二進制日志位置第二位置。
第一判別模塊23,用于根據(jù)所述數(shù)據(jù)切換信息判斷同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)是否存在丟失,當判斷數(shù)據(jù)未存在丟失時,則切換為當前備數(shù)據(jù)庫;當判斷數(shù)據(jù)存在丟失時,提示切換失敗;進一步地,所述第一判別模塊23包括:
第二獲取子模塊231,用于獲取所述第一數(shù)據(jù)庫恢復(fù)正常心跳后的二進制日志位置第四位置;
第一判別子模塊232,用于將第四位置與第二位置進行比較,若第四位置小于等于第二位置,則確定同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)未存在丟失,切換為當前備數(shù)據(jù)庫;若第四位置大于第二位置,則確定同步到所述第二數(shù)據(jù)庫的數(shù)據(jù)存在丟失,與所述第一數(shù)據(jù)庫的數(shù)據(jù)存在差異,提示切換失敗。
進一步地,所述裝置還包括:
第一檢測模塊24,用于檢測所述第一數(shù)據(jù)庫和所述第二數(shù)據(jù)庫之間差異化SQL腳本的開始文件;
第一生成模塊25,用于從所述第一數(shù)據(jù)庫的數(shù)據(jù)中,從二進制日志位置第二位置開始遍歷,直至所有日志文件,生成各事務(wù)的SQL語句,并重定向到目標文本文件。
需要說明的是,本發(fā)明實施例提供的應(yīng)用于當前作為主數(shù)據(jù)庫的第一數(shù)據(jù)庫的數(shù)據(jù)庫主備切換的裝置是應(yīng)用上述應(yīng)用于當前作為主數(shù)據(jù)庫的第一數(shù)據(jù)庫的數(shù)據(jù)庫主備切換的方法的裝置,即上述方法的所有實施例均適用于該裝置,且均能達到相同或相似的有益效果。
參見圖7,本發(fā)明的實施例還提供了一種數(shù)據(jù)庫主備切換的方法,應(yīng)用于作為當前備數(shù)據(jù)庫的第二數(shù)據(jù)庫,包括:
步驟31,獲取管理服務(wù)器當監(jiān)測到作為當前主數(shù)據(jù)庫的第一數(shù)據(jù)庫異常時發(fā)送的備切主請求;
步驟32,從所述備切主請求中獲取所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息,與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息進行比較,判斷數(shù)據(jù)是否一致;當數(shù)據(jù)一致時,則切換為當前主數(shù)據(jù)庫,當數(shù)據(jù)不一致時,提示切換至當前主數(shù)據(jù)庫失敗。
進一步地,步驟32中,從所述備切主請求中獲取所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息,與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息進行比較的步驟包括:
從所述備切主請求中獲取所述第一數(shù)據(jù)庫的當前二進制日志位置第一位置;
獲取所述第二數(shù)據(jù)庫從所述第一數(shù)據(jù)庫復(fù)制數(shù)據(jù)的當前二進制日志位置第五位置;
將所述第一位置與所述第五位置進行比較,若所述第一位置等于所述第五位置,則確定所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息的數(shù)據(jù)一致,切換為當前主數(shù)據(jù)庫;若所述第一位置小于所述第五位置,則確定所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息不一致,提示切換至當前主數(shù)據(jù)庫失敗。
參見圖6,本發(fā)明的實施例提供了一種數(shù)據(jù)庫主備切換的裝置,應(yīng)用于作 為當前備數(shù)據(jù)庫的第二數(shù)據(jù)庫3,所述裝置包括:
第三獲取模塊31,用于獲取管理服務(wù)器當監(jiān)測到作為當前主數(shù)據(jù)庫的第一數(shù)據(jù)庫異常時發(fā)送的備切主請求;
第二判別模塊32,用于從所述備切主請求中獲取所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息,與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息進行比較,判斷數(shù)據(jù)是否一致;當數(shù)據(jù)一致時,則切換為當前主數(shù)據(jù)庫,當數(shù)據(jù)不一致時,提示切換至當前主數(shù)據(jù)庫失敗。
進一步地,所述第二判別模塊包括:
第三獲取子模塊321,用于從所述備切主請求中獲取所述第一數(shù)據(jù)庫的當前二進制日志位置第一位置;
第四獲取子模塊322,用于獲取所述第二數(shù)據(jù)庫從所述第一數(shù)據(jù)庫復(fù)制數(shù)據(jù)的當前二進制日志位置第五位置;
第二判別子模塊323,將所述第一位置與所述第五位置進行比較,若所述第一位置等于所述第五位置,則確定所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息的數(shù)據(jù)一致,切換為當前主數(shù)據(jù)庫;若所述第一位置小于所述第五位置,則確定所述第一數(shù)據(jù)庫的當前數(shù)據(jù)信息與所述第二數(shù)據(jù)庫的當前數(shù)據(jù)信息不一致,提示切換至當前主數(shù)據(jù)庫失敗。
需要說明的是,本發(fā)明實施例提供的應(yīng)用于當前作為備數(shù)據(jù)庫的第二數(shù)據(jù)庫的數(shù)據(jù)庫主備切換的裝置是應(yīng)用上述應(yīng)用于當前作為備數(shù)據(jù)庫的第二數(shù)據(jù)庫的數(shù)據(jù)庫主備切換的方法的裝置,即上述方法的所有實施例均適用于該裝置,且均能達到相同或相似的有益效果。
以上所述是本發(fā)明的優(yōu)選實施方式,應(yīng)當指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明所述原理的前提下,還可以作出若干改進和潤飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。