欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種數(shù)據(jù)備份方法及裝置制造方法

文檔序號:6486981閱讀:143來源:國知局
一種數(shù)據(jù)備份方法及裝置制造方法
【專利摘要】本申請公開了一種數(shù)據(jù)備份方法及裝置,用以解決現(xiàn)有技術(shù)中備庫進(jìn)行數(shù)據(jù)備份的效率較低的問題。該方法預(yù)讀裝置獲取備庫中的relay日志,確定備庫正在處理的操作記錄在relay日志中的位置,讀取該relay日志中位于確定的位置之后的操作記錄對應(yīng)的數(shù)據(jù),并寫入到備庫的內(nèi)存中。由于本申請實施例中預(yù)讀裝置將relay日志中位于備庫當(dāng)前正在處理的操作記錄的位置之后的操作記錄對應(yīng)的數(shù)據(jù)讀取到備庫的內(nèi)存中,也即將備庫后續(xù)要處理的操作記錄對應(yīng)的數(shù)據(jù)讀取到了備庫的內(nèi)存中,因此備庫在處理后續(xù)的操作記錄時,無需從外部存儲器中將相應(yīng)的數(shù)據(jù)讀取到內(nèi)存中,直接對內(nèi)存中已經(jīng)寫入的數(shù)據(jù)進(jìn)行操作即可,從而提高了數(shù)據(jù)備份的效率。
【專利說明】一種數(shù)據(jù)備份方法及裝置
【技術(shù)領(lǐng)域】
[0001]本申請涉及通信【技術(shù)領(lǐng)域】,尤其涉及一種數(shù)據(jù)備份方法及裝置。
【背景技術(shù)】
[0002]MySQL是一種小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。一般的,MySQL包括主庫和備庫,主庫用于提供數(shù)據(jù)管理和數(shù)據(jù)查詢等功能,備庫用于備份主庫中的數(shù)據(jù),用以在主庫發(fā)生故障時代替主庫提供相應(yīng)的功能。
[0003]圖1為現(xiàn)有技術(shù)中MySQL中的主庫將自身的數(shù)據(jù)備份到備庫的過程,具體包括以下步驟:
[0004]SlOl:主庫在對自身的數(shù)據(jù)進(jìn)行操作時,生成對應(yīng)的操作記錄并記錄在二進(jìn)制日志(binlog)中。
[0005]其中,主庫對自身的數(shù)據(jù)的操作包括:更新操作、插入操作、刪除操作。
[0006]例如,主庫對自身的數(shù)據(jù)A更新為數(shù)據(jù)B時,生成將該數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄,并記錄在binlog日志中。
[0007]S102:備庫創(chuàng)建一個I/O線程,通過該I/O線程讀取主庫保存的binlog日志。
[0008]S103:備庫將讀取到的binlog日志轉(zhuǎn)換成中繼日志(relay)。
[0009]其中,主庫保存的binlog日志中記錄的操作記錄,與備庫轉(zhuǎn)換的relay日志中記錄的操作記錄相同,只是binlog日志與relay日志的格式不同。
[0010]繼續(xù)沿用上例,由于主庫的binlog日志中記錄有將數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄,因此備庫轉(zhuǎn)換的relay日志中也包含將數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄。
[0011]S104:備庫創(chuàng)建一個SQL線程,通過創(chuàng)建的SQL線程依次讀取relay日志中記錄的每個操作記錄。
[0012]繼續(xù)沿用上例,備庫讀取到的操作記錄即為將數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄。
[0013]S105:備庫根據(jù)讀取到的操作記錄,確定要根據(jù)該操作記錄進(jìn)行操作的數(shù)據(jù)。
[0014]繼續(xù)沿用上例,由于讀取到的操作記錄為將數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄,因此備庫確定要根據(jù)該操作記錄進(jìn)行操作的數(shù)據(jù)為自身保存的數(shù)據(jù)A。
[0015]S106:備庫判斷自身的內(nèi)存中是否已經(jīng)寫入了確定的數(shù)據(jù),若判斷結(jié)果為是,則進(jìn)行步驟S108,否則進(jìn)行步驟S107。
[0016]繼續(xù)沿用上例,備庫判斷內(nèi)存中是否已經(jīng)寫入了該數(shù)據(jù)A。
[0017]S107:備庫從外部存儲器中將確定的數(shù)據(jù)讀取到內(nèi)存中,進(jìn)行步驟S108。
[0018]如果當(dāng)前備庫的內(nèi)存中未寫入該數(shù)據(jù)A,則備庫需要從外部存儲器中讀取該數(shù)據(jù)A,并寫入到內(nèi)存中。其中,該外部存儲器可以為磁盤等存儲裝置。
[0019]S108:根據(jù)讀取到的該操作記錄,對內(nèi)存中該確定的數(shù)據(jù)進(jìn)行相應(yīng)的操作。
[0020]當(dāng)備庫的內(nèi)存中已經(jīng)寫入了該數(shù)據(jù)A時,則根據(jù)讀取到的將數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄,將內(nèi)存中寫入的該數(shù)據(jù)A更新為數(shù)據(jù)B。
[0021]S109:將操作后的數(shù)據(jù)從內(nèi)存中寫入到外部存儲器中。[0022]備庫將內(nèi)存中更新的數(shù)據(jù)B寫入到外部存儲器中,完成對主庫數(shù)據(jù)的備份。
[0023]在上述圖1所示的過程中,對于備庫的外部存儲器中保存的數(shù)據(jù)來說,如果備庫不對該數(shù)據(jù)進(jìn)行操作,則該數(shù)據(jù)是不會被寫入到備庫的內(nèi)存中的,因此通常上述步驟S106的判斷結(jié)果為否,需要執(zhí)行步驟S107,也即通常備庫需要先將要進(jìn)行操作的數(shù)據(jù)從外部存儲器讀取到內(nèi)存中。
[0024]然而,備庫將外部存儲器中保存的數(shù)據(jù)讀取到內(nèi)存中需要消耗的時間較長,實際上在圖1所示的步驟SlOf S109所需要消耗的總的時間中,將外部存儲器中保存的數(shù)據(jù)讀取到內(nèi)存中的步驟(步驟S107)所消耗的時間就占了很大一部分,這顯然會降低備庫進(jìn)行數(shù)據(jù)備份的效率。

【發(fā)明內(nèi)容】

[0025]本申請實施例提供一種數(shù)據(jù)備份方法及裝置,用以解決現(xiàn)有技術(shù)中備庫進(jìn)行數(shù)據(jù)備份的效率較低的問題。
[0026]本申請實施例提供的一種數(shù)據(jù)備份方法,包括:
[0027]預(yù)讀裝置獲取備庫中的relay日志;并
[0028]確定所述備庫當(dāng)前正在處理的操作記錄在所述relay日志中的位置;以及
[0029]從所述備庫的外部存儲器中讀取所述relay日志中位于確定的位置之后的操作記錄對應(yīng)的數(shù)據(jù),并寫入到所述備庫的內(nèi)存中,使所述備庫在處理所述relay日志中位于所述確定的位置之后的操作記錄時,對已經(jīng)寫入到內(nèi)存中的相應(yīng)的數(shù)據(jù)進(jìn)行操作,實現(xiàn)數(shù)據(jù)的備份。
[0030]本申請實施例提供的一種數(shù)據(jù)備份裝置,包括:
[0031]獲取模塊,用于獲取備庫中的relay日志;
[0032]確定模塊,用于確定所述備庫當(dāng)前正在處理的操作記錄在所述relay日志中的位置;
[0033]預(yù)讀模塊,用于從所述備庫的外部存儲器中讀取所述relay日志中位于確定的位置之后的操作記錄對應(yīng)的數(shù)據(jù),并寫入到所述備庫的內(nèi)存中,使所述備庫在處理所述relay日志中位于所述確定的位置之后的操作記錄時,對已經(jīng)寫入到內(nèi)存中的相應(yīng)的數(shù)據(jù)進(jìn)行操作,實現(xiàn)數(shù)據(jù)的備份。
[0034]本申請實施例提供一種數(shù)據(jù)備份方法及裝置,該方法預(yù)讀裝置獲取備庫中的relay日志,確定備庫當(dāng)前正在處理的操作記錄在該relay日志中的位置,從備庫的外部存儲器中讀取該relay日志中位于確定的位置之后的操作記錄對應(yīng)的數(shù)據(jù),并寫入到備庫的內(nèi)存中。由于本申請實施例中預(yù)讀裝置將relay日志中位于備庫當(dāng)前正在處理的操作記錄的位置之后的操作記錄對應(yīng)的數(shù)據(jù)讀取到備庫的內(nèi)存中,也即將備庫后續(xù)要處理的操作記錄對應(yīng)的數(shù)據(jù)讀取到了備庫的內(nèi)存中,因此備庫在處理后續(xù)的操作記錄時,無需從外部存儲器中將相應(yīng)的數(shù)據(jù)讀取到內(nèi)存中,直接對內(nèi)存中已經(jīng)寫入的數(shù)據(jù)進(jìn)行操作即可,從而提高了數(shù)據(jù)備份的效率。
【專利附圖】

【附圖說明】
[0035]圖1為現(xiàn)有技術(shù)中MySQL中的主庫將自身的數(shù)據(jù)備份到備庫的過程;[0036]圖2為本申請實施例提供的數(shù)據(jù)備份的過程;
[0037]圖3為本申請實施例提供的預(yù)讀裝置將備庫后續(xù)需要操作的數(shù)據(jù)預(yù)先讀取到備庫的內(nèi)存中的過程;
[0038]圖4為本申請實施例提供的數(shù)據(jù)備份裝置結(jié)構(gòu)示意圖。
【具體實施方式】
[0039]由于現(xiàn)有技術(shù)中備庫根據(jù)讀取的relay日志中的操作記錄對相應(yīng)的數(shù)據(jù)進(jìn)行操作時,通常需要在外部存儲器中將相應(yīng)的數(shù)據(jù)讀取到內(nèi)存中再進(jìn)行操作,而在外部存儲器中讀取數(shù)據(jù)需要耗費較長的時間,因此數(shù)據(jù)備份的效率較低。尤其是當(dāng)主庫并發(fā)的對多個數(shù)據(jù)進(jìn)行更新時,備庫就會由于數(shù)據(jù)備份的效率較低而導(dǎo)致備庫中數(shù)據(jù)的更新速度遠(yuǎn)遠(yuǎn)滯后于主庫。
[0040]例如,主庫在I秒鐘內(nèi)并發(fā)的對10個數(shù)據(jù)進(jìn)行了更新,因此binlog日志中I秒鐘內(nèi)產(chǎn)生了 10個操作記錄。而備庫讀取該binlog日志并轉(zhuǎn)換為relay日志后,是按照relay日志中記錄的各操作記錄的先后順序,依次對各操作記錄進(jìn)行處理的,也即備庫是串行處理relay日志中的操作記錄的。假設(shè)備庫每處理一個操作記錄需要消耗I秒鐘,則備庫處理relay日志中相應(yīng)的10個操作記錄,完成相應(yīng)的10個數(shù)據(jù)的備份就需要10秒的時間??梢?,主庫消耗I秒鐘完成的10個數(shù)據(jù)的更新,備庫則需要消耗10秒鐘才能完成相應(yīng)的10個數(shù)據(jù)的備份。而在備庫需要消耗的這10秒鐘時間中,從外部存儲器中將10個數(shù)據(jù)讀取到內(nèi)存的過程所需要的時間就占了很大一部分。
[0041]因此,本申請實施例旨在當(dāng)備庫處理relay日志中的某個操作記錄時,將relay日志中位于備庫當(dāng)前正在處理的該操作記錄之后的操作記錄對應(yīng)的數(shù)據(jù)讀取到備庫的內(nèi)存中,也即將備庫后續(xù)要處理的操作記錄對應(yīng)的數(shù)據(jù)讀取到備庫的內(nèi)存中,使備庫在處理后續(xù)的操作記錄時,無需再從外部存儲器讀取相應(yīng)的數(shù)據(jù),直接對內(nèi)存中已經(jīng)寫入的數(shù)據(jù)進(jìn)行操作即可,以提高數(shù)據(jù)備份的效率。
[0042]下面結(jié)合說明書附圖,對本申請實施例進(jìn)行詳細(xì)描述。
[0043]圖2為本申請實施例提供的數(shù)據(jù)備份的過程,具體包括以下步驟:
[0044]S201:預(yù)讀裝置獲取備庫中的relay日志。
[0045]本申請實施例增加了預(yù)讀裝置,該預(yù)讀裝置在備庫要對主庫中的數(shù)據(jù)進(jìn)行備份時,獲取備庫進(jìn)行數(shù)據(jù)備份所基于的relay日志。
[0046]其中,預(yù)讀裝置可以通過與備庫相似的方法,讀取主庫保存的binlog日志,并將讀取的binlog日志轉(zhuǎn)換成relay日志,作為獲取的備庫中的relay日志。為了盡量降低預(yù)讀裝置從主庫中讀取binlog日志所帶來的網(wǎng)絡(luò)開銷,預(yù)讀裝置也可以在備庫讀取主庫保存的binlog日志,并轉(zhuǎn)換成relay日志之后,讀取備庫轉(zhuǎn)換的relay日志,作為獲取的備庫中的relay日志。
[0047]S202:確定備庫當(dāng)前正在處理的操作記錄在該relay日志中的位置。
[0048]在本申請實施例中,預(yù)讀裝置監(jiān)測備庫當(dāng)前正在處理的操作記錄,由于預(yù)讀裝置已經(jīng)獲取了同樣的relay日志,因此可以確定備庫當(dāng)前正在處理的操作記錄在relay日志中的位置。
[0049]例如,假設(shè)備庫根據(jù)讀取的binlog日志轉(zhuǎn)換的relay日志中共包括100個操作記錄,并且當(dāng)前正在處理該relay日志中的某個操作記錄,由于預(yù)讀裝置也獲取的同樣的relay日志,因此可以根據(jù)監(jiān)測到的備庫當(dāng)前正在處理的該操作記錄,定位備庫當(dāng)前正在處理的操作記錄在該relay日志中的位置。
[0050]S203:從備庫的外部存儲器中讀取該relay日志中位于確定的位置之后的操作記錄對應(yīng)的數(shù)據(jù),并寫入到備庫的內(nèi)存中。
[0051]繼續(xù)沿用上例,假設(shè)在步驟S202中預(yù)讀裝置確定備庫當(dāng)前正在處理的操作記錄在該relay日志中的位置是第I個,則預(yù)讀裝置在備庫的外部存儲器中,讀取該relay日志中第I個操作記錄之后的操作記錄對應(yīng)的數(shù)據(jù),并寫入到內(nèi)存中,具體可以按照該relay日志中記錄的各操作記錄的先后順序,依次將第I個操作記錄之后的各操作記錄對應(yīng)的數(shù)據(jù)讀取到備庫的內(nèi)存中,也即,將該relay日志中第2個操作記錄對應(yīng)的數(shù)據(jù)讀取到內(nèi)存中,再將該relay日志中第3個操作記錄對應(yīng)的數(shù)據(jù)讀取到內(nèi)存中,以此類推,直至將該relay日志中最后一個操作記錄對應(yīng)的數(shù)據(jù)讀取到內(nèi)存中為止。
[0052]另外,在上述步驟S203中,預(yù)讀裝置可以將該relay日志中位于確定的位置之后的操作記錄解析為執(zhí)行語句,將解析的執(zhí)行語句中包含的更新操作語句、插入操作語句、刪除操作語句替換為選擇操作語句并執(zhí)行,以讀取備庫的外部存儲器中相應(yīng)的數(shù)據(jù),并寫入到備庫的內(nèi)存中。
[0053]這是因為備庫根據(jù)操作記錄對相應(yīng)的數(shù)據(jù)進(jìn)行操作的方法即為,將該操作記錄解析為執(zhí)行語句并執(zhí)行,以對相應(yīng)的數(shù)據(jù)進(jìn)行操作。其中,解析成的執(zhí)行語句中包括更新操作(update)語句、插入操作(insert)語句、刪除操作(delete)語句,update語句是對數(shù)據(jù)的更新操作,insert語句是對數(shù)據(jù)的插入操作,delete語句是對數(shù)據(jù)的刪除操作。而選擇操作(select)語句是對數(shù)據(jù)的選擇操作,實質(zhì)上就是將相應(yīng)的數(shù)據(jù)讀取到內(nèi)存中的操作,因此本申請實施例中預(yù)讀裝置采用同樣的方法將relay日志中位于確定的位置之后的操作記錄解析為執(zhí)行語句,將解析出的執(zhí)行語句中的update語句、insert語句、delete語句替換為select語句后并執(zhí)行,即可實現(xiàn)將相應(yīng)的數(shù)據(jù)讀取到備庫的內(nèi)存中。
[0054]S204:備庫在處理該relay日志中位于該確定的位置之后的操作記錄時,對已經(jīng)寫入到內(nèi)存中的相應(yīng)的數(shù)據(jù)進(jìn)行操作,實現(xiàn)數(shù)據(jù)的備份。
[0055]繼續(xù)沿用上例,備庫處理該relay日志中第I個操作記錄之后,也即按照如圖1所示的現(xiàn)有技術(shù)根據(jù)relay日志中的第I個操作記錄對相應(yīng)的數(shù)據(jù)進(jìn)行備份之后,對該relay日志中的第2個操作記錄進(jìn)行處理。首先,備庫確定該第2個操作記錄對應(yīng)的數(shù)據(jù),也即確定要根據(jù)該第2個操作記錄進(jìn)行操作的數(shù)據(jù)。然后,備庫判斷自身的內(nèi)存中是否已經(jīng)寫入了該第2個操作記錄對應(yīng)的數(shù)據(jù)。此時,由于該第2個操作記錄對應(yīng)的數(shù)據(jù)已經(jīng)被預(yù)讀裝置讀取并寫入到內(nèi)存中,因此備庫直接對內(nèi)存中已經(jīng)寫入的該第2個操作記錄對應(yīng)的數(shù)據(jù)進(jìn)行相應(yīng)的操作,以完成第2個操作記錄對應(yīng)的數(shù)據(jù)的備份,而無需耗費大量的時間從外部存儲器中將該第2個操作記錄對應(yīng)的數(shù)據(jù)讀取到內(nèi)存中,從而提高了備份數(shù)據(jù)的效率。
[0056]較佳的,由于本申請實施例的核心思想就在于預(yù)讀裝置將備庫后續(xù)要操作的數(shù)據(jù)預(yù)先讀取到備庫的內(nèi)存中,使備庫在對后續(xù)要操作的數(shù)據(jù)進(jìn)行操作時,無需從外部存儲器中再讀取相應(yīng)的數(shù)據(jù),以提高數(shù)據(jù)備份的效率,因此,為了保證預(yù)讀裝置讀取到備庫內(nèi)存中的數(shù)據(jù)一定是備庫后續(xù)要操作的數(shù)據(jù),在圖2所示的步驟S202中,預(yù)讀裝置確定了備庫當(dāng)前正在處理的操作記錄在relay日志中的位置之后,步驟S203中預(yù)讀裝置讀取該relay日志中位于確定的位置之后的操作記錄對應(yīng)的數(shù)據(jù)的方法具體為:根據(jù)確定的位置以及設(shè)定的偏移值,確定relay日志中位于該確定的位置之后的偏移位置,并按照relay日志中記錄的各操作記錄的先后順序,依次解析relay日志中位于該偏移位置之后的操作記錄,并根據(jù)解析的操作記錄讀取對應(yīng)的數(shù)據(jù)。
[0057]也即,預(yù)讀裝置確定了備庫當(dāng)前正在處理的操作記錄在relay日志中的位置之后,根據(jù)設(shè)定的偏移值,在relay日志中確定相對于確定的位置向后偏移了該設(shè)定的偏移值的位置,作為偏移位置,并按照relay日志中記錄的各操作記錄的先后順序,依次讀取relay日志中位于該偏移位置之后的操作記錄對應(yīng)的數(shù)據(jù)。
[0058]例如,假設(shè)備庫轉(zhuǎn)換的relay日志中共包含100個操作記錄,相應(yīng)的,預(yù)讀裝置獲取到的relay日志中也包含相同的100個操作記錄。假設(shè)備庫當(dāng)前正在處理的操作記錄是relay日志中的第I個操作記錄,設(shè)定偏移值為9,則預(yù)讀裝置確定relay日志中位于確定的位置之后的偏移位置即為relay日志中第10個操作記錄所在的位置,預(yù)讀裝置按照該relay日志中記錄的各操作記錄的先后順序,依次解析該relay日志中位于偏移位置之后的操作記錄,也即依次解析relay日志中第IflOO個操作記錄,并根據(jù)解析的操作記錄讀取對應(yīng)的數(shù)據(jù)。對于relay日志中第f 10個操作記錄對應(yīng)的數(shù)據(jù),則由備庫自行從自身的外部存儲器中讀取。這樣就保證了預(yù)讀裝置讀取并寫入到備庫內(nèi)存中的數(shù)據(jù)一定是備庫后續(xù)要操作的數(shù)據(jù)。
[0059]通過上述方法,一方面,備庫基于relay日志中的各操作記錄,對內(nèi)存中已經(jīng)寫入的數(shù)據(jù)進(jìn)行操作,完成相應(yīng)數(shù)據(jù)的備份,另一方面,預(yù)讀裝置也在按照relay日志中各操作記錄的先后順序,依次將后續(xù)備庫要操作的數(shù)據(jù)預(yù)先讀取到備庫的內(nèi)存中,從而可以顯著提高數(shù)據(jù)備份的效率。
[0060]進(jìn)一步的,考慮到在實際應(yīng)用中,備庫對內(nèi)存中已經(jīng)寫入的數(shù)據(jù)進(jìn)行操作的操作速度,可能會慢于預(yù)讀裝置依次將后續(xù)備庫要操作的數(shù)據(jù)預(yù)先讀取到備庫的內(nèi)存中的讀取速度,也可能會快于預(yù)讀裝置依次將后續(xù)備庫要操作的數(shù)據(jù)預(yù)先讀取到備庫的內(nèi)存中的讀取速度。
[0061]如果備庫的操作速度慢于預(yù)讀裝置的讀取速度,則會導(dǎo)致備庫的內(nèi)存中積壓越來越多的備庫后續(xù)需要操作的數(shù)據(jù),而備庫的內(nèi)存容量是有限的,如果內(nèi)存中已經(jīng)存滿了備庫后續(xù)需要操作的數(shù)據(jù),而預(yù)讀裝置繼續(xù)將備庫后續(xù)需要操作的數(shù)據(jù)讀取到內(nèi)存中,就會導(dǎo)致預(yù)讀裝置之前讀取到備庫內(nèi)存中的數(shù)據(jù)溢出而被丟棄。
[0062]繼續(xù)以relay日志中共包含100個操作記錄為例對上述情況進(jìn)行說明。備庫當(dāng)前正在處理第I個操作記錄,假設(shè)設(shè)定的偏移值為9,則預(yù)讀裝置從第11個的操作記錄依次向后讀取各操作記錄對應(yīng)的數(shù)據(jù)并寫入到內(nèi)存中。而由于備庫的操作速度慢于預(yù)讀裝置的讀取速度,則可能備庫在處理記錄第21個操作記錄時,預(yù)讀裝置已經(jīng)將第70個操作記錄對應(yīng)的數(shù)據(jù)讀取到了備庫的內(nèi)存中,假設(shè)備庫的內(nèi)存最多可以容納50個操作記錄對應(yīng)的數(shù)據(jù),則此時備庫的內(nèi)存中已經(jīng)寫入了 relay日志中第2廣70這50個操作記錄對應(yīng)的數(shù)據(jù)。如果此時預(yù)讀裝置繼續(xù)將第71個操作記錄對應(yīng)的數(shù)據(jù)讀取到備庫的內(nèi)存中,則會導(dǎo)致備庫的內(nèi)存中已經(jīng)寫入的第2廣70這50個操作記錄對應(yīng)的數(shù)據(jù)中的某個數(shù)據(jù)溢出而被丟棄。假設(shè)因溢出而被丟棄的數(shù)據(jù)為第22個操作記錄對應(yīng)的數(shù)據(jù),則備庫在處理完第21個操作記錄時,繼續(xù)處理第22個操作記錄,而由于此時第22個操作記錄對應(yīng)的數(shù)據(jù)已經(jīng)被丟棄,不存在于備庫的內(nèi)存中,從而備庫仍需要自行將該第22個操作記錄對應(yīng)的數(shù)據(jù)讀取到內(nèi)存中,這就會降低數(shù)據(jù)備份的效率。
[0063]相反的,如果備庫的操作速度快于預(yù)讀裝置的讀取速度,則會導(dǎo)致備庫的內(nèi)存中已經(jīng)被寫入的后續(xù)需要操作的數(shù)據(jù)越來越少,當(dāng)備庫的內(nèi)存中已經(jīng)沒有備庫后續(xù)操作的數(shù)據(jù)時,備庫仍需要自行從外部存儲器中讀取數(shù)據(jù)。
[0064]繼續(xù)以relay日志中共包含100個操作記錄為例對上述情況進(jìn)行說明。備庫當(dāng)前正在處理第I個操作記錄,假設(shè)設(shè)定的偏移值為9,則預(yù)讀裝置從第11個操作記錄依次向后讀取各操作記錄對應(yīng)的數(shù)據(jù)并寫入到內(nèi)存中。而由于備庫的操作速度快于預(yù)讀裝置的讀取速度,則可能備庫在處理第21個操作記錄時,預(yù)讀裝置還未將第21個操作記錄對應(yīng)的數(shù)據(jù)讀取到備庫的內(nèi)存中,而由于此時第21個操作記錄對應(yīng)的數(shù)據(jù)不存在于備庫的內(nèi)存中,因此備庫仍需要自行將第21個操作記錄對應(yīng)的數(shù)據(jù)讀取到內(nèi)存中,這樣同樣會降低數(shù)據(jù)備份的效率。
[0065]因此,本申請實施例中為了避免由于備庫的操作速度慢于或者快于預(yù)讀裝置的讀取速度而導(dǎo)致數(shù)據(jù)備份的效率降低的問題,預(yù)讀裝置在按照relay日志中記錄的各操作記錄的先后順序,依次解析該relay日志中位于偏移位置之后的操作記錄,并根據(jù)解析的操作記錄讀取對應(yīng)的數(shù)據(jù)的過程中,還要監(jiān)測relay日志中位于自身正在解析的操作記錄與備庫當(dāng)前正在處理的操作記錄之間的操作記錄的數(shù)量。
[0066]當(dāng)監(jiān)測到的數(shù)量不大于第一設(shè)定閾值且不小于第二設(shè)定閾值時,預(yù)讀裝置繼續(xù)依次解析該relay日志中位于偏移位置之后的操作記錄;
[0067]當(dāng)監(jiān)測到的數(shù)量大于第一設(shè)定閾值時,預(yù)讀裝置暫停對操作記錄的解析,并在暫停設(shè)定的時間長度之后,繼續(xù)依次解析該relay日志中位于偏移位置之后的操作記錄;
[0068]當(dāng)監(jiān)測到的數(shù)量小于第二設(shè)定閾值時,重新確定備庫當(dāng)前正在處理的操作記錄在relay日志中的位置,根據(jù)重新確定的位置以及設(shè)定的偏移值重新確定偏移位置,并按照該relay日志中記錄的各操作記錄的先后順序,依次解析該relay日志中位于重新確定的偏移位置之后的操作記錄。
[0069]其中,第一設(shè)定閾值和第二設(shè)定閾值可以根據(jù)需要進(jìn)行設(shè)定。
[0070]繼續(xù)relay日志中共包含100個操作記錄為例對上述情況進(jìn)行說明。備庫當(dāng)前正在處理第I個操作記錄,假設(shè)設(shè)定的偏移值為9,則預(yù)讀裝置從記錄編號為11的操作記錄依次向后讀取各操作記錄對應(yīng)的數(shù)據(jù)并寫入到內(nèi)存中。假設(shè)第一設(shè)定閾值為40,第二設(shè)定閾值為10,則采用上述方法可以分為以下三種情況:
[0071]情況一、當(dāng)備庫的操作速度與預(yù)讀裝置的讀取速度相比比較合適時,則可能備庫在處理第21個操作記錄時,預(yù)讀裝置正在解析第46個操作記錄,要將該第46個操作記錄對應(yīng)的數(shù)據(jù)讀取到備庫的內(nèi)存中。此時,預(yù)讀裝置監(jiān)測的relay日志中位于自身正在解析的操作記錄與備庫正在處理的操作記錄之間的操作記錄的數(shù)量為25,該數(shù)量25不大于第一設(shè)定閾值40且不小于第二設(shè)定閾值10,說明備庫的操作速度與預(yù)讀裝置的讀取速度相比比較合適,無需調(diào)整自身的讀取速度。因此,預(yù)讀裝置繼續(xù)按照該relay日志中記錄的各操作記錄的先后順序,依次解析該relay日志中位于偏移位置之后的操作記錄,并根據(jù)解析的操作記錄讀取對應(yīng)的數(shù)據(jù)。
[0072]情況二、當(dāng)備庫的操作速度慢于預(yù)讀裝置的讀取速度時,則可能備庫在處理第21個操作記錄時,預(yù)讀裝置正在解析第62個操作記錄,要將該第62個操作記錄對應(yīng)的數(shù)據(jù)讀取到備庫的內(nèi)存中。此時,預(yù)讀裝置監(jiān)測的relay日志中位于自身正在解析的操作記錄與備庫正在處理的操作記錄之間的操作記錄的數(shù)量為41,該數(shù)量41大于第一設(shè)定閾值40,說明預(yù)讀裝置的讀取速度過快,需要降低調(diào)整自身的讀取速度。因此,預(yù)讀裝置暫停對操作記錄的解析,也即暫停解析該第62個操作記錄,暫停對該第62個操作記錄對應(yīng)的數(shù)據(jù)的讀取。假設(shè)設(shè)定的時間長度為10秒,則預(yù)讀裝置在暫停10秒之后,繼續(xù)依次解析該relay日志中位于偏移位置之后的操作記錄,并讀取根據(jù)的操作記錄讀取對應(yīng)的數(shù)據(jù),也即繼續(xù)解析該第62個操作記錄,將該第62個操作記錄對應(yīng)的數(shù)據(jù)讀取到備庫的內(nèi)存中。
[0073]情況三、當(dāng)備庫的操作速度快于預(yù)讀裝置的讀取速度時,則可能備庫在處理第21個操作記錄時,預(yù)讀裝置正在解析第30個操作記錄,要將該第30個操作記錄對應(yīng)的數(shù)據(jù)讀取到備庫的內(nèi)存中。此時,預(yù)讀裝置監(jiān)測的relay日志中位于自身正在解析的操作記錄與備庫正在處理的操作記錄之間的操作記錄的數(shù)量為9,該數(shù)量9小于第二設(shè)定閾值10,說明預(yù)讀裝置的讀取速度過慢,需要提高調(diào)整自身的讀取速度。因此,預(yù)讀裝置重新確定備庫當(dāng)前正在處理的操作記錄在relay日志中的位置,重新確定的位置即為第21個操作記錄所在的位置,根據(jù)重新確定的位置以及設(shè)定的偏移值9重新確定偏移位置,重新確定的偏移位置即為30,預(yù)讀裝置按照該relay日志中記錄的各操作記錄的先后順序,依次解析該relay日志中位于重新確定的偏移位置(第30個操作記錄所在的位置)之后的操作記錄,并根據(jù)解析的操作記錄讀取對應(yīng)的數(shù)據(jù)。也即,此時預(yù)讀裝置放棄對第30個操作記錄的解析,放棄對第30個操作記錄對應(yīng)的數(shù)據(jù)的讀取,直接從第31個操作記錄開始解析并讀取相應(yīng)的數(shù)據(jù),第30個操作記錄對應(yīng)的數(shù)據(jù)由備庫自行從外部存儲器中讀取到內(nèi)存中。
[0074]進(jìn)一步的,當(dāng)預(yù)讀裝置監(jiān)測到relay日志中自身正在解析的操作記錄位于備庫當(dāng)前正在處理的操作記錄之前時,也要按照上述情況三所述的方法進(jìn)行處理,也即,重新確定備庫當(dāng)前正在處理的操作記錄在relay日志中的位置,根據(jù)重新確定的位置以及設(shè)定的偏移值重新確定偏移位置,并按照該relay日志中記錄的各操作記錄的先后順序,依次解析該relay日志中位于重新確定的偏移位置之后的操作記錄。
[0075]通過上述方法,實現(xiàn)了對預(yù)讀裝置讀取速度的控制,使預(yù)讀裝置的讀取速度適應(yīng)備庫的操作速度,以保證在備庫的內(nèi)存中寫入備庫后續(xù)需要操作的數(shù)據(jù)。
[0076]另外,在實際應(yīng)用中,通常主庫的binlog日志中的每個操作記錄都對應(yīng)著一個唯一的記錄編號。具體的,主庫每生成一個操作記錄,就將該操作記錄記錄在binlog日志中,并為該操作記錄設(shè)置記錄編號,為該操作記錄設(shè)置的記錄編號具體為上一次生成的操作記錄的記錄編號加I。也即,binlog日志中的第I個操作記錄的記錄編號為1,第2個操作記錄的記錄編號為2,以此類推。而由于備庫轉(zhuǎn)換的relay日志的內(nèi)容與主庫的binlog日志的內(nèi)容是相同的,只是兩種日志的格式不同,因此在備庫轉(zhuǎn)換的relay日志中,以及預(yù)讀裝置獲取到的relay日志中,每個操作記錄也具有相應(yīng)的記錄編號,并且,同一個操作記錄在binlog日志中的記錄編號與在relay日志中的記錄編號也是相同的。從而,relay日志中操作記錄的記錄編號可以反映出該操作記錄在該relay日志中的位置。
[0077]因此,在圖2所示的步驟S202中,預(yù)讀裝置確定備庫當(dāng)前正在處理的操作記錄在relay日志中的位置的方法可以為:確定備庫當(dāng)前正在處理的操作記錄的記錄編號。
[0078]并且,預(yù)讀裝置讀取該relay日志中位于確定的位置之后的操作記錄對應(yīng)的數(shù)據(jù)的方法可以為:確定備庫當(dāng)前正在處理的操作記錄的記錄編號與設(shè)定偏移值的和值,按照該relay日志中各操作記錄的記錄編號從小到大的順序,依次解析該relay日志中記錄編號大于確定的該和值的操作記錄,并根據(jù)解析的操作記錄讀取對應(yīng)的數(shù)據(jù),將讀取的數(shù)據(jù)寫入到備庫的內(nèi)存中。
[0079]進(jìn)一步的,預(yù)讀裝置監(jiān)測relay日志中位于自身正在解析的操作記錄與備庫當(dāng)前正在處理的操作記錄之間的操作記錄的數(shù)量的方法可以為:監(jiān)測自身正在解析的操作記錄的記錄編號與備庫當(dāng)前正在處理的操作記錄的記錄編號的差值。當(dāng)監(jiān)測到的差值不大于第一設(shè)定閾值且不小于第二設(shè)定閾值時,預(yù)讀裝置繼續(xù)依次解析該relay日志中記錄編號大于確定的該和值的操作記錄;當(dāng)監(jiān)測到的差值大于第一設(shè)定閾值時,預(yù)讀裝置暫停對操作記錄的解析,并在暫停設(shè)定的時間長度之后,繼續(xù)依次解析該relay日志中記錄編號大于確定的該和值的操作記錄;當(dāng)監(jiān)測到的差值小于第二設(shè)定閾值時,重新確定備庫當(dāng)前正在處理的操作記錄的記錄編號與設(shè)定偏移值的和值,并按照該relay日志中各操作記錄的記錄編號從小到大的順序,依次解析該relay日志中記錄編號大于重新確定的該和值的操作記錄。
[0080]另外,在MySQL中,備庫對主庫中的數(shù)據(jù)進(jìn)行備份有兩種模式,一種是語句(STATEMENT)模式,另一種是行(ROW)模式。在STATEMENT模式下,備庫進(jìn)行數(shù)據(jù)備份時所基于的relay日志是普通的日志,而在ROW模式下,備庫進(jìn)行數(shù)據(jù)備份時所基于的relay日志是二進(jìn)制日志。因此,當(dāng)備庫采用STATEMENT模式進(jìn)行數(shù)據(jù)備份時,預(yù)讀裝置可以采用任意計算機(jī)語言編程實現(xiàn),只要能夠解析普通的relay日志即可。而當(dāng)備庫采用ROW模式進(jìn)行數(shù)據(jù)備份時,就需要預(yù)讀裝置可以解析二進(jìn)制的relay日志,由于MySQL是采用C++語言編寫的開源代碼,因此可以將MySQL中用于解析ROW模式下二進(jìn)制relay日志的代碼應(yīng)用到本申請實施例的預(yù)讀裝置中,使預(yù)讀裝置可以解析ROW模式下二進(jìn)制的relay日志,此時,本申請實施例中的預(yù)讀裝置采用C++語言編程實現(xiàn)。
[0081]圖3為本申請實施例提供的預(yù)讀裝置將備庫后續(xù)需要操作的數(shù)據(jù)預(yù)先讀取到備庫的內(nèi)存中的過程,具體包括以下步驟:
[0082]S301:預(yù)讀裝置在備庫讀取主庫保存的binlog日志,并轉(zhuǎn)換成relay日志之后,讀取備庫轉(zhuǎn)換的relay日志。
[0083]S302:確定備庫當(dāng)前正在處理的操作記錄的記錄編號。
[0084]S303:確定備庫當(dāng)前正在處理的操作記錄的記錄編號與設(shè)定偏移值的和值,對relay日志中記錄編號為該和值的操作記錄的下一個操作記錄進(jìn)行解析,并根據(jù)解析的操作記錄讀取對應(yīng)的數(shù)據(jù),將讀取的數(shù)據(jù)寫入到備庫的內(nèi)存中。
[0085]S304:預(yù)讀裝置監(jiān)測自身正在解析的操作記錄的記錄編號與備庫當(dāng)前正在處理的操作記錄的記錄編號的差值,當(dāng)監(jiān)測到的差值不大于第一設(shè)定閾值且不小于第二設(shè)定閾值時,執(zhí)行步驟S305,當(dāng)監(jiān)測到的差值大于第一設(shè)定閾值時,執(zhí)行步驟S306,當(dāng)監(jiān)測到的差值小于第二設(shè)定閾值時,執(zhí)行步驟S307。
[0086]S305:按照relay日志中各操作記錄的記錄編號從小到大的順序,解析下一個操作記錄,并讀取解析的下一個操作記錄對應(yīng)的數(shù)據(jù),將讀取的數(shù)據(jù)寫入到備庫的內(nèi)存中,返回步驟S304。
[0087]S306:暫停對操作記錄的解析和對數(shù)據(jù)的讀取,并在暫停設(shè)定的時間長度之后,繼續(xù)解析下一個操作記錄,并讀取解析的下一個操作記錄對應(yīng)的數(shù)據(jù),將讀取的數(shù)據(jù)寫入到備庫的內(nèi)存中,返回步驟S304。
[0088]S307:重新確定備庫當(dāng)前正在處理的操作記錄的記錄編號與設(shè)定偏移值的和值,并解析該relay日志中記錄編號為重新確定的該和值的操作記錄,并讀取解析的操作記錄對應(yīng)的數(shù)據(jù),返回步驟S304。
[0089]上述圖3所示的過程為備庫進(jìn)行數(shù)據(jù)備份時,預(yù)讀裝置將備庫后續(xù)需要操作的數(shù)據(jù)預(yù)先讀取到備庫的內(nèi)存中的過程,在預(yù)讀裝置進(jìn)行如圖3所示的過程時,備庫也要按照relay日志中記錄的各操作記錄的先后順序,依次根據(jù)各操作記錄對內(nèi)存中相應(yīng)的數(shù)據(jù)進(jìn)行操作,實現(xiàn)數(shù)據(jù)備份。
[0090]圖4為本申請實施例提供的數(shù)據(jù)備份裝置結(jié)構(gòu)示意圖,具體包括:
[0091]獲取模塊401,用于獲取備庫中的relay日志;
[0092]確定模塊402,用于確定所述備庫當(dāng)前正在處理的操作記錄在所述relay日志中的位置;
[0093]預(yù)讀模塊403,用于從所述備庫的外部存儲器中讀取所述relay日志中位于確定的位置之后的操作記錄對應(yīng)的數(shù)據(jù),并寫入到所述備庫的內(nèi)存中,使所述備庫在處理所述relay日志中位于所述確定的位置之后的操作記錄時,對已經(jīng)寫入到內(nèi)存中的相應(yīng)的數(shù)據(jù)進(jìn)行操作,實現(xiàn)數(shù)據(jù)的備份。
[0094]所述獲取模塊401具體用于,讀取主庫保存的binlog日志,并將讀取的binlog日志轉(zhuǎn)換成relay日志,作為獲取的備庫中的relay日志,或者,在所述備庫讀取主庫保存的binlog日志,并轉(zhuǎn)換成relay日志之后,讀取所述備庫轉(zhuǎn)換的relay日志,作為獲取的備庫中的relay日志。
[0095]所述預(yù)讀模塊403具體用于,根據(jù)所述確定的位置以及設(shè)定的偏移值,確定所述relay日志中位于所述確定的位置之后的偏移位置,按照所述relay日志中記錄的各操作記錄的先后順序,依次解析所述relay日志中位于所述偏移位置之后的操作記錄,并根據(jù)解析的操作記錄讀取對應(yīng)的數(shù)據(jù)。
[0096]所述裝置還包括:
[0097]監(jiān)測模塊404,用于監(jiān)測所述relay日志中位于所述預(yù)讀模塊403正在解析的操作記錄與所述備庫當(dāng)前正在處理的操作記錄之間的操作記錄的數(shù)量;
[0098]所述預(yù)讀模塊403具體用于,當(dāng)監(jiān)測到的數(shù)量不大于第一設(shè)定閾值且不小于第二設(shè)定閾值時,繼續(xù)依次解析所述relay日志中位于所述偏移位置之后的操作記錄;當(dāng)監(jiān)測到的數(shù)量大于第一設(shè)定閾值時,暫停對操作記錄的解析,并在暫停設(shè)定的時間長度之后,繼續(xù)依次解析所述relay日志中位于所述偏移位置之后的操作記錄;當(dāng)監(jiān)測到的數(shù)量小于第二設(shè)定閾值時,重新確定所述備庫當(dāng)前正在處理的操作記錄在所述relay日志中的位置,根據(jù)重新確定的位置以及所述設(shè)定的偏移值重新確定偏移位置,并按照所述relay日志中記錄的各操作記錄的先后順序,依次解析所述relay日志中位于所述偏移位置之后的操作記錄。
[0099]所述預(yù)讀模塊403具體用于,將所述relay日志中位于確定的位置之后的操作記錄解析為執(zhí)行語句,將解析的執(zhí)行語句中包含的更新操作語句、插入操作語句、刪除操作語句替換為選擇操作語句并執(zhí)行,以讀取所述備庫的外部存儲器中相應(yīng)的數(shù)據(jù),并寫入到所述備庫的內(nèi)存中。
[0100]本申請實施例提供一種數(shù)據(jù)備份方法及裝置,該方法預(yù)讀裝置獲取備庫中的relay日志,確定備庫當(dāng)前正在處理的操作記錄在該relay日志中的位置,從備庫的外部存儲器中讀取該relay日志中位于確定的位置之后的操作記錄對應(yīng)的數(shù)據(jù),并寫入到備庫的內(nèi)存中。由于本申請實施例中預(yù)讀裝置將relay日志中位于備庫當(dāng)前正在處理的操作記錄的位置之后的操作記錄對應(yīng)的數(shù)據(jù)讀取到備庫的內(nèi)存中,也即將備庫后續(xù)要處理的操作記錄對應(yīng)的數(shù)據(jù)讀取到了備庫的內(nèi)存中,因此備庫在處理后續(xù)的操作記錄時,無需從外部存儲器中將相應(yīng)的數(shù)據(jù)讀取到內(nèi)存中,直接對內(nèi)存中已經(jīng)寫入的數(shù)據(jù)進(jìn)行操作即可,從而提高了數(shù)據(jù)備份的效率。
[0101]顯然,本領(lǐng)域的技術(shù)人員可以對本申請進(jìn)行各種改動和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請也意圖包含這些改動和變型在內(nèi)。
【權(quán)利要求】
1.一種數(shù)據(jù)備份方法,其特征在于,包括: 預(yù)讀裝置獲取備庫中的relay日志;并 確定所述備庫當(dāng)前正在處理的操作記錄在所述relay日志中的位置;以及從所述備庫的外部存儲器中讀取所述relay日志中位于確定的位置之后的操作記錄對應(yīng)的數(shù)據(jù),并寫入到所述備庫的內(nèi)存中,使所述備庫在處理所述relay日志中位于所述確定的位置之后的操作記錄時,對已經(jīng)寫入到內(nèi)存中的相應(yīng)的數(shù)據(jù)進(jìn)行操作,實現(xiàn)數(shù)據(jù)的備份。
2.如權(quán)利要求1所述的方法,其特征在于,預(yù)讀裝置獲取備庫中的relay日志,具體包括: 所述預(yù)讀裝置讀取主庫保存的binlog日志,并將讀取的binlog日志轉(zhuǎn)換成relay日志,作為獲取的備庫中的relay日志;或者 所述預(yù)讀裝置在所述備庫讀取主庫保存的binlog日志,并轉(zhuǎn)換成relay日志之后,讀取所述備庫轉(zhuǎn)換的relay日志,作為獲取的備庫中的relay日志。
3.如權(quán)利要求1所述的方法,其特征在于,讀取所述relay日志中位于確定的位置之后的操作記錄對應(yīng)的數(shù)據(jù),具體包括: 根據(jù)所述確定的位置以及設(shè)定的偏移值,確定所述relay日志中位于所述確定的位置之后的偏移位置;并 按照所述relay日志中記錄的各操作記錄的先后順序,依次解析所述relay日志中位于所述偏移位置之后的操作記錄,并根據(jù)解析的操作記錄讀取對應(yīng)的數(shù)據(jù)。
4.如權(quán)利要求3所述的方法,其特征在于,所述方法還包括: 所述預(yù)讀裝置監(jiān)測所述relay日志中位于自身正在解析的操作記錄與所述備庫當(dāng)前正在處理的操作記錄之間的操作記錄的數(shù)量; 依次解析所述relay日志中位于所述偏移位置之后的操作記錄,具體包括: 當(dāng)監(jiān)測到的數(shù)量不大于第一設(shè)定閾值且不小于第二設(shè)定閾值時,繼續(xù)依次解析所述relay日志中位于所述偏移位置之后的操作記錄; 當(dāng)監(jiān)測到的數(shù)量大于第一設(shè)定閾值時,暫停對操作記錄的解析,并在暫停設(shè)定的時間長度之后,繼續(xù)依次解析所述relay日志中位于所述偏移位置之后的操作記錄; 當(dāng)監(jiān)測到的數(shù)量小于第二設(shè)定閾值時,重新確定所述備庫當(dāng)前正在處理的操作記錄在所述relay日志中的位置,根據(jù)重新確定的位置以及所述設(shè)定的偏移值重新確定偏移位置,并按照所述relay日志中記錄的各操作記錄的先后順序,依次解析所述relay日志中位于重新確定的偏移位置之后的操作記錄。
5.如權(quán)利要求1所述的方法,其特征在于,從所述備庫的外部存儲器中讀取所述relay日志中位于確定的位置之后的操作記錄對應(yīng)的數(shù)據(jù),并寫入到所述備庫的內(nèi)存中,具體包括: 將所述relay日志中位于確定的位置之后的操作記錄解析為執(zhí)行語句,將解析的執(zhí)行語句中包含的更新操作語句、插入操作語句、刪除操作語句替換為選擇操作語句并執(zhí)行,以讀取所述備庫的外部存儲器中相應(yīng)的數(shù)據(jù),并寫入到所述備庫的內(nèi)存中。
6.一種數(shù)據(jù)備份裝置,其特征在于,包括: 獲取模塊,用于獲取備庫中的relay日志;確定模塊,用于確定所述備庫當(dāng)前正在處理的操作記錄在所述relay日志中的位置; 預(yù)讀模塊,用于從所述備庫的外部存儲器中讀取所述relay日志中位于確定的位置之后的操作記錄對應(yīng)的數(shù) 據(jù),并寫入到所述備庫的內(nèi)存中,使所述備庫在處理所述relay日志中位于所述確定的位置之后的操作記錄時,對已經(jīng)寫入到內(nèi)存中的相應(yīng)的數(shù)據(jù)進(jìn)行操作,實現(xiàn)數(shù)據(jù)的備份。
7.如權(quán)利要求6所述的裝置,其特征在于,所述獲取模塊具體用于,讀取主庫保存的binlog日志,并將讀取的binlog日志轉(zhuǎn)換成relay日志,作為獲取的備庫中的relay日志,或者,在所述備庫讀取主庫保存的binlog日志,并轉(zhuǎn)換成relay日志之后,讀取所述備庫轉(zhuǎn)換的relay日志,作為獲取的備庫中的relay日志。
8.如權(quán)利要求6所述的裝置,其特征在于,所述預(yù)讀模塊具體用于,根據(jù)所述確定的位置以及設(shè)定的偏移值,確定所述relay日志中位于所述確定的位置之后的偏移位置,按照所述relay日志中記錄的各操作記錄的先后順序,依次解析所述relay日志中位于所述偏移位置之后的操作記錄,并根據(jù)讀取解析的操作記錄讀取對應(yīng)的數(shù)據(jù)。
9.如權(quán)利要求8所述的裝置,其特征在于,所述裝置還包括: 監(jiān)測模塊,用于監(jiān)測所述relay日志中位于所述預(yù)讀模塊正在解析的操作記錄與所述備庫當(dāng)前正在處理的操作記錄之間的操作記錄的數(shù)量; 所述預(yù)讀模塊具體用于,當(dāng)監(jiān)測到的數(shù)量不大于第一設(shè)定閾值且不小于第二設(shè)定閾值時,繼續(xù)依次解析所述relay日志中位于所述偏移位置之后的操作記錄;當(dāng)監(jiān)測到的數(shù)量大于第一設(shè)定閾值時,暫停對操作記錄的解析,并在暫停設(shè)定的時間長度之后,繼續(xù)依次解析所述relay日志中位于所述偏移位置之后的操作記錄;當(dāng)監(jiān)測到的數(shù)量小于第二設(shè)定閾值時,重新確定所述備庫當(dāng)前正在處理的操作記錄在所述relay日志中的位置,根據(jù)重新確定的位置以及所述設(shè)定的偏移值重新確定偏移位置,并按照所述relay日志中記錄的各操作記錄的先后順序,依次解析所述relay日志中位于重新確定的偏移位置之后的操作記錄。
10.如權(quán)利要求6所述的裝置,其特征在于,所述預(yù)讀模塊具體用于,將所述relay日志中位于確定的位置之后的操作記錄解析為執(zhí)行語句,將解析的執(zhí)行語句中包含的更新操作語句、插入操作語句、刪除操作語句替換為選擇操作語句并執(zhí)行,以讀取所述備庫的外部存儲器中相應(yīng)的數(shù)據(jù),并寫入到所述備庫的內(nèi)存中。
【文檔編號】G06F11/14GK103544076SQ201210244652
【公開日】2014年1月29日 申請日期:2012年7月13日 優(yōu)先權(quán)日:2012年7月13日
【發(fā)明者】翟衛(wèi)祥, 劉輝, 張新銘 申請人:阿里巴巴集團(tuán)控股有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
天门市| 拜城县| 东乌珠穆沁旗| 东乡县| 五莲县| 涟源市| 金山区| 德令哈市| 绥棱县| 白水县| 田林县| 华坪县| 呼伦贝尔市| 阿巴嘎旗| 锦州市| 庆安县| 灌阳县| 左云县| 晋宁县| 黑龙江省| 乐东| 菏泽市| 牟定县| 郁南县| 金华市| 镶黄旗| 兰州市| 蒙阴县| 张掖市| 娱乐| 河东区| 朝阳市| 南京市| 巴塘县| 改则县| 阿克陶县| 新巴尔虎右旗| 海口市| 辽源市| 旌德县| 绥宁县|