專利名稱:一種實(shí)現(xiàn)數(shù)據(jù)庫(kù)雙主改造的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫(kù)領(lǐng)域,特別涉及一種實(shí)現(xiàn)數(shù)據(jù)庫(kù)雙主改造的方法及裝置。
背景技術(shù):
隨著使用數(shù)據(jù)庫(kù)應(yīng)用的發(fā)展,各種應(yīng)用對(duì)數(shù)據(jù)庫(kù)系統(tǒng)穩(wěn)定性的要求不斷提高。數(shù)據(jù)庫(kù)系統(tǒng)一般為單主多從構(gòu)架,主數(shù)據(jù)庫(kù)服務(wù)器為應(yīng)用程序提供寫入訪問(wèn),從數(shù)據(jù)庫(kù)服務(wù)器為應(yīng)用程序提供只讀訪問(wèn)。當(dāng)主數(shù)據(jù)庫(kù)服務(wù)器故障時(shí),服務(wù)暫停,隨后啟用從數(shù)據(jù)庫(kù)服務(wù)器中的一臺(tái)做主庫(kù)服務(wù)器,對(duì)其進(jìn)行與主數(shù)據(jù)庫(kù)服務(wù)器相同的配置,接受應(yīng)用程序的寫入操作,重新啟動(dòng)寫入服務(wù),重新配置從數(shù)據(jù)庫(kù)服務(wù)器,將從數(shù)據(jù)庫(kù)服務(wù)器的主服務(wù)器設(shè)置為重新定位的主數(shù)據(jù)庫(kù)服務(wù)器。但是,由于單主多從構(gòu)架的數(shù)據(jù)庫(kù)系統(tǒng)在主數(shù)據(jù)庫(kù)服務(wù)器發(fā)生故障時(shí),服務(wù)會(huì)發(fā)生暫停,導(dǎo)致服務(wù)的連續(xù)性降低。目前,MYSQL-MMM軟件可以用來(lái)實(shí)現(xiàn)在主數(shù)據(jù)庫(kù)服務(wù)器發(fā)生故障時(shí)自動(dòng)切換主從關(guān)系,不必服務(wù)暫停,但是,從數(shù)據(jù)庫(kù)服務(wù)器連接備數(shù)據(jù)庫(kù)服務(wù)器的時(shí)間,與備用數(shù)據(jù)庫(kù)服務(wù)器接替主數(shù)據(jù)庫(kù)服務(wù)器的時(shí)間之間有一端延時(shí),造成從數(shù)據(jù)庫(kù)服務(wù)器會(huì)丟失延時(shí)這段時(shí)間內(nèi)的寫入數(shù)據(jù),而且,該軟件大概每個(gè)小時(shí)都會(huì)進(jìn)行一次主備的相互切換,切換時(shí)間大概有2秒會(huì)無(wú)法訪問(wèn)數(shù)據(jù)庫(kù),造成了該軟件現(xiàn)在已經(jīng)無(wú)法滿足各種應(yīng)用對(duì)數(shù)據(jù)庫(kù)系統(tǒng)穩(wěn)定性和服務(wù)的連續(xù)性越來(lái)越高的要求。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種實(shí)現(xiàn)數(shù)據(jù)庫(kù)雙主改造的方法及裝置以實(shí)現(xiàn)保證數(shù)據(jù)庫(kù)系統(tǒng)能夠連續(xù)服務(wù)且不丟失數(shù)據(jù)的目的。本發(fā)明提供了一種實(shí)現(xiàn)數(shù)據(jù)庫(kù)雙主改造的方法,該方法包括監(jiān)測(cè)主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài),其中,所述主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn),配置有與其同步復(fù)制的備數(shù)據(jù)庫(kù)服務(wù)器;在監(jiān)測(cè)到所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)異常時(shí),以所述備數(shù)據(jù)庫(kù)服務(wù)器代替主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn);執(zhí)行以下從庫(kù)切換步驟,包括通過(guò)計(jì)算所述備數(shù)據(jù)庫(kù)服務(wù)器和從數(shù)據(jù)庫(kù)服務(wù)器分別最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置的差值,確定從數(shù)據(jù)庫(kù)服務(wù)器在讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置;將所述備數(shù)據(jù)庫(kù)服務(wù)器設(shè)置為所述從數(shù)據(jù)庫(kù)服務(wù)器的主服務(wù)器。優(yōu)選地,所述主數(shù)據(jù)庫(kù)服務(wù)器與所述備數(shù)據(jù)庫(kù)服務(wù)器共同使用一個(gè)第一虛擬IP,該第一虛擬IP用于寫訪問(wèn)。優(yōu)選地,所述從數(shù)據(jù)庫(kù)服務(wù)器共同使用一個(gè)第二虛擬IP,該第二虛擬IP用于讀訪問(wèn)。優(yōu)選地,所述通過(guò)計(jì)算所述備數(shù)據(jù)庫(kù)服務(wù)器和從數(shù)據(jù)庫(kù)服務(wù)器分別最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置的差值,確定從數(shù)據(jù)庫(kù)服務(wù)器在讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置具體包括以下步驟獲得備數(shù)據(jù)庫(kù)服務(wù)器最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置為第一位置;獲得從數(shù)據(jù)庫(kù)服務(wù)器最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置為第二位置;獲得備數(shù)據(jù)庫(kù)服務(wù)器日志結(jié)束的位置為第三位置;比較第一位置與第二位置;若第一位置等于第二位置,確定第三位置為從數(shù)據(jù)庫(kù)服務(wù)器讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置;若第一位置大于第二位置,確定從數(shù)據(jù)庫(kù)服務(wù)器讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置為第三位置減去第一位置與第二位置的偏移量;若第一位置小于第二位置,將從數(shù)據(jù)庫(kù)服務(wù)器的中繼日志中取得的第二位置之后的日志信息,發(fā)送給所述備數(shù)據(jù)庫(kù)服務(wù)器使其執(zhí)行所述日志信息,獲得執(zhí)行日志信息后的備數(shù)據(jù)庫(kù)服務(wù)器日志結(jié)束的位置為更新的第三位置,確定從數(shù)據(jù)庫(kù)服務(wù)器讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置為更新的第三位置。優(yōu)選地,在監(jiān)測(cè)到所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)異常時(shí),還包括在預(yù)設(shè)的間隔時(shí)間后,再判斷所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)是否異常;如果是,則以所述備數(shù)據(jù)庫(kù)服務(wù)器代替主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn),執(zhí)行所述從庫(kù)切換步驟;如果否,則繼續(xù)監(jiān)測(cè)數(shù)據(jù)庫(kù)系統(tǒng)中主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)。優(yōu)選地,將所述備數(shù)據(jù)庫(kù)服務(wù)器設(shè)置為所述從數(shù)據(jù)庫(kù)服務(wù)器的主服務(wù)器之后,還包括發(fā)出使所述從數(shù)據(jù)庫(kù)服務(wù)器啟動(dòng)復(fù)制的指令。優(yōu)選地,還包括監(jiān)測(cè)所述從數(shù)據(jù)庫(kù)服務(wù)器;在監(jiān)測(cè)到所述從數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行狀態(tài)異常時(shí),增加新的從數(shù)據(jù)庫(kù)服務(wù)器,并建立所述新的從數(shù)據(jù)庫(kù)服務(wù)器與所述主數(shù)據(jù)庫(kù)服務(wù)器之間的從屬關(guān)系。優(yōu)選地,所述監(jiān)測(cè)主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)具體在所述從數(shù)據(jù)庫(kù)服務(wù)器端監(jiān)測(cè),所述從庫(kù)切換步驟具體在所述從數(shù)據(jù)庫(kù)服務(wù)器端執(zhí)行。本發(fā)明還提供一種實(shí)現(xiàn)數(shù)據(jù)庫(kù)雙主改造的裝置,包括監(jiān)測(cè)單元用于監(jiān)測(cè)主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài),將所述運(yùn)行狀態(tài)發(fā)送至切換單元,其中,所述主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn),配置有與其同步復(fù)制的備數(shù)據(jù)庫(kù)服務(wù)器,在監(jiān)測(cè)到所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)異常時(shí),以所述備數(shù)據(jù)庫(kù)服務(wù)器代替主數(shù)據(jù)庫(kù)服務(wù)器提供與訪問(wèn);切換單元用于在監(jiān)測(cè)到所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)異常時(shí),通過(guò)計(jì)算所述備數(shù)據(jù)庫(kù)服務(wù)器和從數(shù)據(jù)庫(kù)服務(wù)器分別最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置的差值,確定從數(shù)據(jù)庫(kù)服務(wù)器在讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置,將所述備數(shù)據(jù)庫(kù)服務(wù)器設(shè)置為所述從數(shù)據(jù)庫(kù)服務(wù)器的主服務(wù)器。
可見本發(fā)明具有如下有益效果由于本發(fā)明監(jiān)測(cè)了主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài),從而可以在主數(shù)據(jù)庫(kù)服務(wù)器宕機(jī)時(shí),由與其同步復(fù)制的備數(shù)據(jù)庫(kù)服務(wù)器代替主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn),不需要在主數(shù)據(jù)庫(kù)服務(wù)器正常的狀態(tài)下頻繁的進(jìn)行主數(shù)據(jù)庫(kù)服務(wù)器和備數(shù)據(jù)庫(kù)服務(wù)器之間的切換,滿足了對(duì)數(shù)據(jù)庫(kù)系統(tǒng)服務(wù)連續(xù)性的要求;在主數(shù)據(jù)庫(kù)服務(wù)器與備數(shù)據(jù)庫(kù)服務(wù)器切換之后,通過(guò)計(jì)算所述備數(shù)據(jù)庫(kù)服務(wù)器和從數(shù)據(jù)庫(kù)服務(wù)器分別最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置的差值,確定從數(shù)據(jù)庫(kù)服務(wù)器在讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置,從而保證了在延時(shí)的情況下,從數(shù)據(jù)庫(kù)服務(wù)器或者備數(shù)據(jù)庫(kù)服務(wù)器均不會(huì)發(fā)生丟失寫入數(shù)據(jù)的情況,滿足了對(duì)數(shù)據(jù)系統(tǒng)穩(wěn)定性的要求。
圖1是本發(fā)明可以實(shí)施的一種數(shù)據(jù)庫(kù)系統(tǒng)架構(gòu)圖例;圖2是本發(fā)明一種實(shí)現(xiàn)數(shù)據(jù)庫(kù)雙主改造的方法的實(shí)施例的流程圖;圖3是本發(fā)明確定從數(shù)據(jù)庫(kù)服務(wù)器讀取備數(shù)據(jù)庫(kù)服務(wù)器日志的起始位置的流程圖例;圖4是本發(fā)明一種實(shí)現(xiàn)數(shù)據(jù)庫(kù)雙主改造的裝置的實(shí)施例的組成圖。
具體實(shí)施例方式為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明實(shí)施例作進(jìn)一步詳細(xì)的說(shuō)明。為了使得本發(fā)明以下實(shí)施例更加易于理解,首選介紹本發(fā)明可以實(shí)施的一種數(shù)據(jù)庫(kù)系統(tǒng)架構(gòu),參見圖1,該數(shù)據(jù)庫(kù)系統(tǒng)的結(jié)構(gòu)圖可以如圖1所示,所述數(shù)據(jù)庫(kù)系統(tǒng)包括主數(shù)據(jù)庫(kù)服務(wù)器101,與主數(shù)據(jù)庫(kù)服務(wù)器同步復(fù)制的備數(shù)據(jù)庫(kù)服務(wù)器102,至少一個(gè)從屬于所述主數(shù)據(jù)庫(kù)服務(wù)器的從數(shù)據(jù)庫(kù)服務(wù)器,例如從數(shù)據(jù)庫(kù)服務(wù)器103、從數(shù)據(jù)庫(kù)服務(wù)器104、從數(shù)據(jù)庫(kù)服務(wù)器105,其中主數(shù)據(jù)庫(kù)服務(wù)器101負(fù)責(zé)提供寫訪問(wèn),備數(shù)據(jù)庫(kù)服務(wù)器102與主數(shù)據(jù)庫(kù)服務(wù)器101做成主備模式,從數(shù)據(jù)庫(kù)服務(wù)器103到105負(fù)責(zé)讀訪問(wèn),具體地,可以利用MYSQL搭建該數(shù)據(jù)庫(kù)系統(tǒng)架構(gòu),可以由MYSQL提供的replication實(shí)現(xiàn)所述同步復(fù)制,由MYSQL提供的Ivs控制讀訪問(wèn)在從數(shù)據(jù)庫(kù)服務(wù)器之間輪替執(zhí)行,當(dāng)然本發(fā)明可以實(shí)施的數(shù)據(jù)庫(kù)系統(tǒng)不僅局限于這一種架構(gòu),當(dāng)然,該數(shù)據(jù)庫(kù)系統(tǒng)架構(gòu),還可以利用其他方法或者工具搭建,并不局限于MYSQL或者某一具體工具,在這里介紹該數(shù)據(jù)庫(kù)系統(tǒng)架構(gòu)僅僅是為了使本領(lǐng)域技術(shù)人員能夠更好地理解,進(jìn)而實(shí)現(xiàn)本發(fā)明,而并非以任何方式限制本發(fā)明的范圍。參見圖2,為本發(fā)明提供的一種實(shí)現(xiàn)數(shù)據(jù)庫(kù)雙主改造的方法的實(shí)施例的流程,如圖所示,包括S201、監(jiān)測(cè)主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài),其中,所述主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn),配置有與其同步復(fù)制的備數(shù)據(jù)庫(kù)服務(wù)器;例如,在所述主數(shù)據(jù)庫(kù)服務(wù)器的從屬服務(wù)器端對(duì)主數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行監(jiān)測(cè),其中,所述從數(shù)據(jù)庫(kù)服務(wù)器提供讀訪問(wèn),是所述主數(shù)據(jù)庫(kù)服務(wù)器的從屬服務(wù)器,監(jiān)測(cè)所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài),可以通過(guò)以下步驟實(shí)現(xiàn)監(jiān)測(cè)向主數(shù)據(jù)庫(kù)服務(wù)器發(fā)送寫訪問(wèn)的數(shù)據(jù),在從數(shù)據(jù)庫(kù)服務(wù)器端正常的情況下,通過(guò)從數(shù)據(jù)庫(kù)服務(wù)器發(fā)出讀訪問(wèn),如果讀訪問(wèn)能夠獲得寫訪問(wèn)的數(shù)據(jù),則認(rèn)為所述主數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行狀態(tài)正常,否則運(yùn)行狀態(tài)異常。S202、在監(jiān)測(cè)到主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)異常時(shí),以所述備數(shù)據(jù)庫(kù)服務(wù)器代替主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn);例如,可以由MYSQL的ke印lived實(shí)現(xiàn)在主數(shù)據(jù)庫(kù)服務(wù)器故障時(shí),所述備數(shù)據(jù)庫(kù)服務(wù)器代替主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn)。S203、執(zhí)行以下從庫(kù)切換步驟需要說(shuō)明的是,執(zhí)行以下從庫(kù)切換步驟是在監(jiān)測(cè)到所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)異常后執(zhí)行,所述從庫(kù)切換步驟包括S203.1、通過(guò)計(jì)算所述備數(shù)據(jù)庫(kù)服務(wù)器和從數(shù)據(jù)庫(kù)服務(wù)器分別最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置的差值,確定從數(shù)據(jù)庫(kù)服務(wù)器在讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置;需要說(shuō)明的是,在本發(fā)明具體實(shí)施時(shí),若步驟SlOl步驟所述監(jiān)測(cè)主數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行狀態(tài)在所述從數(shù)據(jù)庫(kù)服務(wù)器端監(jiān)測(cè),則在該步驟S102中所述從數(shù)據(jù)庫(kù)服務(wù)器可以具體為該監(jiān)測(cè)所述主數(shù)據(jù)庫(kù)服務(wù)器的從數(shù)據(jù)庫(kù)服務(wù)器,若步驟SlOl步驟所述檢測(cè)主數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行狀態(tài)在單獨(dú)的數(shù)據(jù)庫(kù)管理服務(wù)器端進(jìn)行檢測(cè),則在該步驟S102中所述從數(shù)據(jù)庫(kù)服務(wù)器可以具體為所述主數(shù)據(jù)庫(kù)服務(wù)器所有的從屬數(shù)據(jù)庫(kù)服務(wù)器,因此,在本發(fā)明的實(shí)施場(chǎng)景不同和需求不同的情況下,所述從數(shù)據(jù)庫(kù)服務(wù)器具體所指的范圍可以不同。S203. 2、將所述備數(shù)據(jù)庫(kù)服務(wù)器設(shè)置為所述從數(shù)據(jù)庫(kù)服務(wù)器的主服務(wù)器??梢?,在步驟S201中,本發(fā)明通過(guò)監(jiān)測(cè)主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài),從而可以在步驟S202主數(shù)據(jù)庫(kù)服務(wù)器宕機(jī)時(shí),由與其同步復(fù)制的備數(shù)據(jù)庫(kù)服務(wù)器代替主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn),不影響系統(tǒng)的正常訪問(wèn),因此不需要在主數(shù)據(jù)庫(kù)服務(wù)器正常的狀態(tài)下頻繁的進(jìn)行主數(shù)據(jù)庫(kù)服務(wù)器和備數(shù)據(jù)庫(kù)服務(wù)器之間的切換,滿足了對(duì)數(shù)據(jù)庫(kù)系統(tǒng)服務(wù)連續(xù)性的要求;在步驟S202主數(shù)據(jù)庫(kù)服務(wù)器與備數(shù)據(jù)庫(kù)服務(wù)器切換之后,在步驟S203. 2從數(shù)據(jù)庫(kù)服務(wù)器連接到備數(shù)據(jù)庫(kù)服務(wù)器之前,本發(fā)明提出步驟S203.1通過(guò)計(jì)算所述備數(shù)據(jù)庫(kù)服務(wù)器和從數(shù)據(jù)庫(kù)服務(wù)器分別最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置的差值,確定從數(shù)據(jù)庫(kù)服務(wù)器在讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置,從而保證了在延時(shí)的情況下,從數(shù)據(jù)庫(kù)服務(wù)器或者備數(shù)據(jù)庫(kù)服務(wù)器均不會(huì)發(fā)生丟失寫入數(shù)據(jù)的情況,滿足了對(duì)數(shù)據(jù)系統(tǒng)穩(wěn)定性的要求。在本發(fā)明的另一個(gè)優(yōu)選實(shí)施例中,所述主數(shù)據(jù)庫(kù)服務(wù)器與所述備數(shù)據(jù)庫(kù)服務(wù)器可以共同使用一個(gè)第一虛擬IP,該第一虛擬IP用于寫訪問(wèn),在外部訪問(wèn)使用的寫IP不變的情況下,主數(shù)據(jù)庫(kù)服務(wù)器和備數(shù)據(jù)庫(kù)服務(wù)器切換不會(huì)對(duì)外部訪問(wèn)造成影響,另外,還可以將所述負(fù)責(zé)讀訪問(wèn)的從數(shù)據(jù)庫(kù)服務(wù)器共同使用一個(gè)第二虛擬IP,該第二虛擬IP用于讀訪問(wèn),也起到相類似的作用,當(dāng)然,如果不共同使用一個(gè)虛擬IP,還可以通過(guò)其他可用的方法在寫IP不變的情況下,將寫訪問(wèn)數(shù)據(jù)發(fā)送到備數(shù)據(jù)庫(kù)服務(wù)器,使其達(dá)到相同效果,在本發(fā)明中并不進(jìn)行限制。在本發(fā)明又一優(yōu)選實(shí)施例中,所述通過(guò)計(jì)算所述備數(shù)據(jù)庫(kù)服務(wù)器和從數(shù)據(jù)庫(kù)服務(wù)器分別最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置的差值,確定從數(shù)據(jù)庫(kù)服務(wù)器在讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置,參見圖3,例如,具體可以包括以下步驟S301、獲得備數(shù)據(jù)庫(kù)服務(wù)器最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置為第一位置;S302、獲得從數(shù)據(jù)庫(kù)服務(wù)器最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置為第二位置;需要說(shuō)明的是,在該實(shí)施例中,所述備數(shù)據(jù)庫(kù)服務(wù)器與所述從數(shù)據(jù)庫(kù)服務(wù)器在復(fù)制主數(shù)據(jù)庫(kù)服務(wù)器的數(shù)據(jù)時(shí),讀取的是相同的日志文件,在這里,所述第一位置,第二位置均指的是主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置,根據(jù)第一位置與第二位置,可以獲知備數(shù)據(jù)庫(kù)服務(wù)器與從數(shù)據(jù)庫(kù)服務(wù)器復(fù)制了主數(shù)據(jù)庫(kù)服務(wù)器日志中的哪些數(shù)據(jù)。S303、獲得備數(shù)據(jù)庫(kù)服務(wù)器日志結(jié)束的位置為第三位置;在該步驟中,該第三位置為所述備數(shù)據(jù)庫(kù)服務(wù)器本身日志的結(jié)束位置,也就是在主數(shù)據(jù)庫(kù)服務(wù)器和備數(shù)據(jù)庫(kù)服務(wù)器切換時(shí),備數(shù)據(jù)庫(kù)服務(wù)器器本身日志的結(jié)束位置。S304、比較第一位置與第二位置;S305、若第一位置等于第二位置,確定第三位置為從數(shù)據(jù)庫(kù)服務(wù)器讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置;在該步驟中,若第一位置等于第二位置,說(shuō)明在主備切換時(shí),備數(shù)據(jù)庫(kù)服務(wù)器和從數(shù)據(jù)庫(kù)服務(wù)器,從主數(shù)據(jù)庫(kù)服務(wù)器中復(fù)制了相同數(shù)據(jù)的內(nèi)容,在從數(shù)據(jù)庫(kù)服務(wù)器和備數(shù)據(jù)庫(kù)服務(wù)器端,都沒(méi)有丟失任何數(shù)據(jù),也就是說(shuō),在從數(shù)據(jù)庫(kù)連接到備數(shù)據(jù)庫(kù)之后,從數(shù)據(jù)庫(kù)服務(wù)器可以直接在主備切換時(shí)備數(shù)據(jù)庫(kù)服務(wù)器本身日志結(jié)束的位置開始從備數(shù)據(jù)庫(kù)服務(wù)器復(fù)制數(shù)據(jù),因此,確定第三位置為從數(shù)據(jù)庫(kù)服務(wù)器讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置。S306、若第一位置大于第二位置,確定從數(shù)據(jù)庫(kù)服務(wù)器讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置為第三位置減去第一位置與第二位置的偏移量;在該步驟中,若第一位置大于第二位置,說(shuō)明在主備切換時(shí),備數(shù)據(jù)庫(kù)服務(wù)器比從數(shù)據(jù)庫(kù)服務(wù)器,從主數(shù)據(jù)庫(kù)服務(wù)器日志中多復(fù)制了一部分?jǐn)?shù)據(jù),若要從數(shù)據(jù)庫(kù)服務(wù)器不丟失備數(shù)據(jù)服務(wù)器多復(fù)制的那部分?jǐn)?shù)據(jù),在從數(shù)據(jù)庫(kù)連接到備數(shù)據(jù)庫(kù)之后,從數(shù)據(jù)庫(kù)服務(wù)器應(yīng)該從備數(shù)據(jù)庫(kù)服務(wù)器中復(fù)制回這部分未從主數(shù)據(jù)庫(kù)服務(wù)器讀取的數(shù)據(jù),因此,確定從數(shù)據(jù)庫(kù)服務(wù)器讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置為第三位置減去第一位置與第二位置的偏移量,也就是起始位置=第三位置(第一位置-第二位置)或者起始位置=第三位置-第一位置+第二位置。S307、若第一位置小于第二位置,將從數(shù)據(jù)庫(kù)服務(wù)器的中繼日志中取得的第二位置之后的日志信息,發(fā)送給所述備數(shù)據(jù)庫(kù)服務(wù)器使其執(zhí)行所述日志信息,獲得執(zhí)行日志信息后的備數(shù)據(jù)庫(kù)服務(wù)器日志結(jié)束的位置為更新的第三位置,確定從數(shù)據(jù)庫(kù)服務(wù)器讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置為更新的第三位置。在該步驟中,若第一位置大于第二位置,說(shuō)明在主備切換時(shí),備數(shù)據(jù)庫(kù)服務(wù)器比從數(shù)據(jù)庫(kù)服務(wù)器,從主數(shù)據(jù)庫(kù)服務(wù)器日志中少?gòu)?fù)制了一部分?jǐn)?shù)據(jù),若要備數(shù)據(jù)庫(kù)服務(wù)器不丟失從數(shù)據(jù)庫(kù)服務(wù)器多復(fù)制的那部分?jǐn)?shù)據(jù),在從數(shù)據(jù)庫(kù)連接到備數(shù)據(jù)庫(kù)之前,備數(shù)據(jù)庫(kù)服務(wù)器應(yīng)該從從數(shù)據(jù)庫(kù)服務(wù)器中復(fù)制回這部分未從主數(shù)據(jù)庫(kù)服務(wù)器讀取的數(shù)據(jù),因此,需要將從數(shù)據(jù)庫(kù)服務(wù)器的中繼日志中取得的第二位置之后的日志信息,發(fā)送給所述備數(shù)據(jù)庫(kù)服務(wù)器使其執(zhí)行所述日志信息,獲得執(zhí)行日志信息后的備數(shù)據(jù)庫(kù)服務(wù)器日志結(jié)束的位置為更新的第三位置,確定從數(shù)據(jù)庫(kù)服務(wù)器讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置為更新的第三位置。另外,考慮到有可能出現(xiàn)主數(shù)據(jù)庫(kù)服務(wù)器本身沒(méi)有故障,而是網(wǎng)絡(luò)或者其他原因?qū)е碌闹鲾?shù)據(jù)庫(kù)服務(wù)器短暫運(yùn)行異常,又恢復(fù)正常的情況,在這種情況下,并不需要進(jìn)行主備切換和從庫(kù)切換,因此,在監(jiān)測(cè)到所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)異常時(shí),還可以包括在預(yù)設(shè)的間隔時(shí)間后,再判斷所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)是否異常;如果是,則以所述備數(shù)據(jù)庫(kù)服務(wù)器代替主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn),執(zhí)行所述從庫(kù)切換步驟;如果否,則繼續(xù)監(jiān)測(cè)數(shù)據(jù)庫(kù)系統(tǒng)中主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)。在本發(fā)明具體實(shí)施時(shí),通常需要所述從數(shù)據(jù)庫(kù)服務(wù)器與其主服務(wù)器同步更新,因此,在步驟S203. 2將所述備數(shù)據(jù)庫(kù)服務(wù)器設(shè)置為所述從數(shù)據(jù)庫(kù)服務(wù)器的主服務(wù)器之后,還可以包括發(fā)出使所述從數(shù)據(jù)庫(kù)服務(wù)器啟動(dòng)復(fù)制的指令。 考慮到整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的運(yùn)行穩(wěn)定,在監(jiān)測(cè)主數(shù)據(jù)庫(kù)運(yùn)行狀態(tài)的基礎(chǔ)上,還可以包括監(jiān)測(cè)所述從數(shù)據(jù)庫(kù)服務(wù)器;在監(jiān)測(cè)到所述從數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行狀態(tài)異常時(shí),增加新的從數(shù)據(jù)庫(kù)服務(wù)器,并建立所述新的從數(shù)據(jù)庫(kù)服務(wù)器與所述主數(shù)據(jù)庫(kù)服務(wù)器之間的從屬關(guān)系O另外,為了解決從數(shù)據(jù)庫(kù)服務(wù)器越來(lái)越多所導(dǎo)致的故障恢復(fù)時(shí)間越長(zhǎng)的問(wèn)題,在本發(fā)明的一個(gè)優(yōu)選實(shí)施例中,所述監(jiān)測(cè)主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)具體在所述從數(shù)據(jù)庫(kù)服務(wù)器端監(jiān)測(cè),所述從庫(kù)切換步驟具體在所述從數(shù)據(jù)庫(kù)服務(wù)器端執(zhí)行,使得每個(gè)從數(shù)據(jù)庫(kù)服務(wù)器端都能夠?qū)χ鲾?shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)及時(shí)獲知,并且對(duì)主備切換的動(dòng)作及時(shí)跟隨,及時(shí)連接到備數(shù)據(jù)庫(kù)服務(wù)器,盡量降低讀訪問(wèn)的影響。本發(fā)明還提供一種實(shí)現(xiàn)數(shù)據(jù)庫(kù)雙主改造的裝置,參見圖4,包括監(jiān)測(cè)單元401 :用于監(jiān)測(cè)主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài),將所述運(yùn)行狀態(tài)發(fā)送至切換單元,其中,所述主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn),配置有與其同步復(fù)制的備數(shù)據(jù)庫(kù)服務(wù)器,在監(jiān)測(cè)到所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)異常時(shí),以所述備數(shù)據(jù)庫(kù)服務(wù)器代替主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn);切換單元402 :用于在監(jiān)測(cè)到所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)異常時(shí),通過(guò)計(jì)算所述備數(shù)據(jù)庫(kù)服務(wù)器和從數(shù)據(jù)庫(kù)服務(wù)器分別最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置的差值,確定從數(shù)據(jù)庫(kù)服務(wù)器在讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置,將所述備數(shù)據(jù)庫(kù)服務(wù)器設(shè)置為所述從數(shù)據(jù)庫(kù)服務(wù)器的主服務(wù)器。需要說(shuō)明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同要素。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種實(shí)現(xiàn)數(shù)據(jù)庫(kù)雙主改造的方法,其特征在于,包括監(jiān)測(cè)主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài),其中,所述主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn),配置有 與其同步復(fù)制的備數(shù)據(jù)庫(kù)服務(wù)器;在監(jiān)測(cè)到所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)異常時(shí),以所述備數(shù)據(jù)庫(kù)服務(wù)器代替主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn);執(zhí)行以下從庫(kù)切換步驟,包括通過(guò)計(jì)算所述備數(shù)據(jù)庫(kù)服務(wù)器和從數(shù)據(jù)庫(kù)服務(wù)器分別最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置的差值,確定從數(shù)據(jù)庫(kù)服務(wù)器在讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置; 將所述備數(shù)據(jù)庫(kù)服務(wù)器設(shè)置為所述從數(shù)據(jù)庫(kù)服務(wù)器的主服務(wù)器。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述主數(shù)據(jù)庫(kù)服務(wù)器與所述備數(shù)據(jù)庫(kù)服務(wù)器共同使用一個(gè)第一虛擬IP,該第一虛擬IP用于寫訪問(wèn)。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述從數(shù)據(jù)庫(kù)服務(wù)器共同使用一個(gè)第二虛擬IP,該第二虛擬IP用于讀訪問(wèn)。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述通過(guò)計(jì)算所述備數(shù)據(jù)庫(kù)服務(wù)器和從數(shù)據(jù)庫(kù)服務(wù)器分別最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置的差值,確定從數(shù)據(jù)庫(kù)服務(wù)器在讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置具體包括以下步驟獲得備數(shù)據(jù)庫(kù)服務(wù)器最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置為第一位置;獲得從數(shù)據(jù)庫(kù)服務(wù)器最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置為第二位置; 獲得備數(shù)據(jù)庫(kù)服務(wù)器日志結(jié)束的位置為第三位置;比較第一位置與第二位置;若第一位置等于第二位置,確定第三位置為從數(shù)據(jù)庫(kù)服務(wù)器讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置;若第一位置大于第二位置,確定從數(shù)據(jù)庫(kù)服務(wù)器讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置為第三位置減去第一位置與第二位置的偏移量;若第一位置小于第二位置,將從數(shù)據(jù)庫(kù)服務(wù)器的中繼日志中取得的第二位置之后的日志信息,發(fā)送給所述備數(shù)據(jù)庫(kù)服務(wù)器使其執(zhí)行所述日志信息,獲得執(zhí)行日志信息后的備數(shù)據(jù)庫(kù)服務(wù)器日志結(jié)束的位置為更新的第三位置,確定從數(shù)據(jù)庫(kù)服務(wù)器讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置為更新的第三位置。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,在監(jiān)測(cè)到所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)異常時(shí),還包括在預(yù)設(shè)的間隔時(shí)間后,再判斷所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)是否異常;如果是,則以所述備數(shù)據(jù)庫(kù)服務(wù)器代替主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn),執(zhí)行所述從庫(kù)切換步驟;如果否,則繼續(xù)監(jiān)測(cè)數(shù)據(jù)庫(kù)系統(tǒng)中主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,將所述備數(shù)據(jù)庫(kù)服務(wù)器設(shè)置為所述從數(shù)據(jù)庫(kù)服務(wù)器的主服務(wù)器之后,還包括發(fā)出使所述從數(shù)據(jù)庫(kù)服務(wù)器啟動(dòng)復(fù)制的指令。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括監(jiān)測(cè)所述從數(shù)據(jù)庫(kù)服務(wù)器;在監(jiān)測(cè)到所述從數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行狀態(tài)異常時(shí),增加新的從數(shù)據(jù)庫(kù)服務(wù)器,并建立所述新的從數(shù)據(jù)庫(kù)服務(wù)器與所述主數(shù)據(jù)庫(kù)服務(wù)器之間的從屬關(guān)系。
8.根據(jù)權(quán)利要求1-7任意一項(xiàng)所述的方法,其特征在于,所述監(jiān)測(cè)主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)具體在所述從數(shù)據(jù)庫(kù)服務(wù)器端監(jiān)測(cè),所述從庫(kù)切換步驟具體在所述從數(shù)據(jù)庫(kù)服務(wù)器端執(zhí)行。
9.一種實(shí)現(xiàn)數(shù)據(jù)庫(kù)雙主改造的裝置,其特征在于,包括監(jiān)測(cè)單元用于監(jiān)測(cè)主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài),將所述運(yùn)行狀態(tài)發(fā)送至切換單元,其中,所述主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn),配置有與其同步復(fù)制的備數(shù)據(jù)庫(kù)服務(wù)器,在監(jiān)測(cè)到所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)異常時(shí),以所述備數(shù)據(jù)庫(kù)服務(wù)器代替主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn);切換單元用于在監(jiān)測(cè)到所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)異常時(shí),通過(guò)計(jì)算所述備數(shù)據(jù)庫(kù)服務(wù)器和從數(shù)據(jù)庫(kù)服務(wù)器分別最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置的差值確定從數(shù)據(jù)庫(kù)服務(wù)器在讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置,將所述備數(shù)據(jù)庫(kù)服務(wù)器設(shè)置為所述從數(shù)據(jù)庫(kù)服務(wù)器的主服務(wù)器。
全文摘要
本發(fā)明公開了一種實(shí)現(xiàn)數(shù)據(jù)庫(kù)雙主改造的方法及裝置以實(shí)現(xiàn)數(shù)據(jù)庫(kù)系統(tǒng)能夠連續(xù)服務(wù)且不丟失數(shù)據(jù)的目的,包括監(jiān)測(cè)主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài),其中,所述主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn),配置有與其同步復(fù)制的備數(shù)據(jù)庫(kù)服務(wù)器,在監(jiān)測(cè)到所述主數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行狀態(tài)異常時(shí),以所述備數(shù)據(jù)庫(kù)服務(wù)器代替主數(shù)據(jù)庫(kù)服務(wù)器提供寫訪問(wèn),執(zhí)行從庫(kù)切換步驟,包括通過(guò)計(jì)算所述備數(shù)據(jù)庫(kù)服務(wù)器和從數(shù)據(jù)庫(kù)服務(wù)器分別最后一次讀取到主數(shù)據(jù)庫(kù)服務(wù)器日志中的位置的差值,確定從數(shù)據(jù)庫(kù)服務(wù)器在讀取備數(shù)據(jù)庫(kù)服務(wù)器日志時(shí)的起始位置,將所述備數(shù)據(jù)庫(kù)服務(wù)器設(shè)置為所述從數(shù)據(jù)庫(kù)服務(wù)器的主服務(wù)器,從而滿足數(shù)據(jù)庫(kù)系統(tǒng)提供連續(xù)服務(wù)、從庫(kù)跟隨切換延時(shí)的情況下不丟失數(shù)據(jù)的要求。
文檔編號(hào)G06F17/30GK103019875SQ20121055733
公開日2013年4月3日 申請(qǐng)日期2012年12月19日 優(yōu)先權(quán)日2012年12月19日
發(fā)明者楊春宇 申請(qǐng)人:北京世紀(jì)家天下科技發(fā)展有限公司