本申請(qǐng)實(shí)施例涉及計(jì)算機(jī),具體涉及數(shù)據(jù)庫、云服務(wù),尤其涉及一種數(shù)據(jù)同步方法、裝置、計(jì)算機(jī)可讀介質(zhì)、電子設(shè)備及計(jì)算機(jī)程序產(chǎn)品。
背景技術(shù):
1、mysql系統(tǒng)可以將數(shù)據(jù)更新操作以binlog(binary?log,二進(jìn)制日志)的形式存儲(chǔ)(如:mysql-bin.000001,mysql-bin.000002,mysql-bin.000003,日志文件的后綴數(shù)值按照日志生成時(shí)間順序增長)。通過對(duì)binlog數(shù)據(jù)按順序的進(jìn)行解析和重放,就可以實(shí)現(xiàn)對(duì)數(shù)據(jù)源(即,生成binlog數(shù)據(jù)的mysql實(shí)例)的同步(復(fù)制)?,F(xiàn)有的基于mysql?binlog的第三方實(shí)時(shí)數(shù)據(jù)發(fā)布工具,一般都是通過對(duì)主從復(fù)制協(xié)議的模擬來實(shí)現(xiàn)的,其需要在原有系統(tǒng)結(jié)構(gòu)的基礎(chǔ)上引入額外的組件才能實(shí)現(xiàn)。
技術(shù)實(shí)現(xiàn)思路
1、本申請(qǐng)實(shí)施例提出了一種數(shù)據(jù)同步方法、裝置、計(jì)算機(jī)可讀介質(zhì)、電子設(shè)備及計(jì)算機(jī)程序產(chǎn)品。
2、第一方面,本申請(qǐng)實(shí)施例提供了一種數(shù)據(jù)同步方法,包括:確定數(shù)據(jù)庫的目標(biāo)節(jié)點(diǎn)是否包括待同步的預(yù)寫入日志數(shù)據(jù);響應(yīng)于確定包括,通過將目標(biāo)節(jié)點(diǎn)的原同步函數(shù)替換后的新同步函數(shù),將預(yù)寫入日志數(shù)據(jù)同步至目標(biāo)存儲(chǔ)系統(tǒng),其中,原同步函數(shù)用于將預(yù)寫入日志數(shù)據(jù)持久化至目標(biāo)節(jié)點(diǎn)。
3、在一些示例中,目標(biāo)節(jié)點(diǎn)為數(shù)據(jù)庫的從節(jié)點(diǎn),以及上述方法還包括:將數(shù)據(jù)庫的主節(jié)點(diǎn)中的原始預(yù)寫入日志數(shù)據(jù)同步至目標(biāo)節(jié)點(diǎn)的中繼日志中;重放中繼日志中的原始預(yù)寫入日志數(shù)據(jù),得到重放過程中生成的預(yù)寫入日志數(shù)據(jù),并將預(yù)寫入日志數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)庫所處的操作系統(tǒng)的系統(tǒng)緩存中。
4、在一些示例中,上述通過將目標(biāo)節(jié)點(diǎn)的原同步函數(shù)替換后的新同步函數(shù),將預(yù)寫入日志數(shù)據(jù)同步至目標(biāo)存儲(chǔ)系統(tǒng),包括:響應(yīng)于確定目標(biāo)節(jié)點(diǎn)調(diào)用原同步函數(shù),通過原同步函數(shù)對(duì)應(yīng)的函數(shù)鉤子調(diào)用新同步函數(shù),將預(yù)寫入日志數(shù)據(jù)同步至目標(biāo)存儲(chǔ)系統(tǒng),其中,在目標(biāo)節(jié)點(diǎn)的應(yīng)用程序的啟動(dòng)過程中,包括新同步函數(shù)的動(dòng)態(tài)鏈接庫被加載。
5、在一些示例中,上述方法還包括:將預(yù)寫入日志數(shù)據(jù)異步持久化至目標(biāo)節(jié)點(diǎn)。
6、在一些示例中,上述方法還包括:響應(yīng)于目標(biāo)節(jié)點(diǎn)被重啟,參照目標(biāo)存儲(chǔ)系統(tǒng)中的日志數(shù)據(jù)對(duì)目標(biāo)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步。
7、在一些示例中,上述參照目標(biāo)存儲(chǔ)系統(tǒng)中的日志數(shù)據(jù)對(duì)目標(biāo)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步,包括:確定目標(biāo)存儲(chǔ)系統(tǒng)中日志文件的文件名的后綴數(shù)值中的最大值和目標(biāo)節(jié)點(diǎn)中的數(shù)據(jù)位點(diǎn)所在的日志文件的文件名的目標(biāo)后綴數(shù)值,其中,日志文件的文件名的后綴數(shù)值與文件生成時(shí)間呈正相關(guān);將目標(biāo)存儲(chǔ)系統(tǒng)中文件名的后綴數(shù)值處于目標(biāo)后綴數(shù)值至最大值之間的日志文件同步至目標(biāo)節(jié)點(diǎn)。
8、在一些示例中,上述將預(yù)寫入日志數(shù)據(jù)同步至目標(biāo)存儲(chǔ)系統(tǒng),包括:確定預(yù)寫入日志數(shù)據(jù)所在的待同步日志文件是否被首次向目標(biāo)存儲(chǔ)系統(tǒng)進(jìn)行數(shù)據(jù)同步;響應(yīng)于確定是,根據(jù)待同步日志文件的文件名的后綴數(shù)值,生成目標(biāo)存儲(chǔ)系統(tǒng)中的被同步日志文件;采用對(duì)象存儲(chǔ)方式,將預(yù)寫入日志數(shù)據(jù)同步至被同步日志文件中。
9、在一些示例中,上述目標(biāo)存儲(chǔ)系統(tǒng)包括第三方存儲(chǔ)系統(tǒng)中的分布式存儲(chǔ)系統(tǒng)和/或消息隊(duì)列。
10、第二方面,本申請(qǐng)實(shí)施例提供了一種數(shù)據(jù)同步裝置,包括:確定單元,被配置成確定數(shù)據(jù)庫的目標(biāo)節(jié)點(diǎn)是否包括待同步的預(yù)寫入日志數(shù)據(jù);同步單元,被配置成響應(yīng)于確定包括,通過將目標(biāo)節(jié)點(diǎn)的原同步函數(shù)替換后的新同步函數(shù),將預(yù)寫入日志數(shù)據(jù)同步至目標(biāo)存儲(chǔ)系統(tǒng),其中,原同步函數(shù)用于將預(yù)寫入日志數(shù)據(jù)持久化至目標(biāo)節(jié)點(diǎn)。
11、在一些示例中,目標(biāo)節(jié)點(diǎn)為數(shù)據(jù)庫的從節(jié)點(diǎn),以及上述裝置還包括:中繼單元,被配置成將數(shù)據(jù)庫的主節(jié)點(diǎn)中的原始預(yù)寫入日志數(shù)據(jù)同步至目標(biāo)節(jié)點(diǎn)的中繼日志中;重放單元,被配置成重放中繼日志中的原始預(yù)寫入日志數(shù)據(jù),得到重放過程中生成的預(yù)寫入日志數(shù)據(jù),并將預(yù)寫入日志數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)庫所處的操作系統(tǒng)的系統(tǒng)緩存中。
12、在一些示例中,上述同步單元,進(jìn)一步被配置成:響應(yīng)于確定目標(biāo)節(jié)點(diǎn)調(diào)用原同步函數(shù),通過原同步函數(shù)對(duì)應(yīng)的函數(shù)鉤子調(diào)用新同步函數(shù),將預(yù)寫入日志數(shù)據(jù)同步至目標(biāo)存儲(chǔ)系統(tǒng),其中,在目標(biāo)節(jié)點(diǎn)的應(yīng)用程序的啟動(dòng)過程中,包括新同步函數(shù)的動(dòng)態(tài)鏈接庫被加載。
13、在一些示例中,上述裝置還包括:異步持久化單元,被配置成將預(yù)寫入日志數(shù)據(jù)異步持久化至目標(biāo)節(jié)點(diǎn)。
14、在一些示例中,上述裝置還包括:重啟恢復(fù)單元,被配置成響應(yīng)于目標(biāo)節(jié)點(diǎn)被重啟,參照目標(biāo)存儲(chǔ)系統(tǒng)中的日志數(shù)據(jù)對(duì)目標(biāo)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步。
15、在一些示例中,上述重啟恢復(fù)單元,進(jìn)一步被配置成:確定目標(biāo)存儲(chǔ)系統(tǒng)中日志文件的文件名的后綴數(shù)值中的最大值和目標(biāo)節(jié)點(diǎn)中的數(shù)據(jù)位點(diǎn)所在的日志文件的文件名的目標(biāo)后綴數(shù)值,其中,日志文件的文件名的后綴數(shù)值與文件生成時(shí)間呈正相關(guān);將目標(biāo)存儲(chǔ)系統(tǒng)中文件名的后綴數(shù)值處于目標(biāo)后綴數(shù)值至最大值之間的日志文件同步至目標(biāo)節(jié)點(diǎn)。
16、在一些示例中,上述同步單元,進(jìn)一步被配置成:確定預(yù)寫入日志數(shù)據(jù)所在的待同步日志文件是否被首次向目標(biāo)存儲(chǔ)系統(tǒng)進(jìn)行數(shù)據(jù)同步;響應(yīng)于確定是,根據(jù)待同步日志文件的文件名的后綴數(shù)值,生成目標(biāo)存儲(chǔ)系統(tǒng)中的被同步日志文件;采用對(duì)象存儲(chǔ)方式,將預(yù)寫入日志數(shù)據(jù)同步至被同步日志文件中。
17、在一些示例中,上述目標(biāo)存儲(chǔ)系統(tǒng)包括第三方存儲(chǔ)系統(tǒng)中的分布式存儲(chǔ)系統(tǒng)和/或消息隊(duì)列。
18、第三方面,本申請(qǐng)實(shí)施例提供了一種計(jì)算機(jī)可讀介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,其中,程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如第一方面任一實(shí)現(xiàn)方式描述的方法。
19、第四方面,本申請(qǐng)實(shí)施例提供了一種電子設(shè)備,包括:一個(gè)或多個(gè)處理器;存儲(chǔ)裝置,其上存儲(chǔ)有一個(gè)或多個(gè)程序,當(dāng)一個(gè)或多個(gè)程序被一個(gè)或多個(gè)處理器執(zhí)行,使得一個(gè)或多個(gè)處理器實(shí)現(xiàn)如第一方面任一實(shí)現(xiàn)方式描述的方法。
20、第五方面,提供了一種計(jì)算機(jī)程序產(chǎn)品,包括:計(jì)算機(jī)程序,計(jì)算機(jī)程序在被處理器執(zhí)行時(shí)實(shí)現(xiàn)如第一方面任一實(shí)現(xiàn)方式描述的方法。
21、本申請(qǐng)實(shí)施例提供的數(shù)據(jù)同步方法及裝置,通過確定數(shù)據(jù)庫的目標(biāo)節(jié)點(diǎn)是否包括待同步的預(yù)寫入日志數(shù)據(jù);響應(yīng)于確定包括,通過將目標(biāo)節(jié)點(diǎn)的原同步函數(shù)替換后的新同步函數(shù),將預(yù)寫入日志數(shù)據(jù)同步至目標(biāo)存儲(chǔ)系統(tǒng),其中,原同步函數(shù)用于將預(yù)寫入日志數(shù)據(jù)持久化至目標(biāo)節(jié)點(diǎn),從而將原同步函數(shù)替換為新同步函數(shù),使得目標(biāo)節(jié)點(diǎn)對(duì)于預(yù)寫入日志數(shù)據(jù)的本地持久化過程被替換為預(yù)寫入日志數(shù)據(jù)向目標(biāo)存儲(chǔ)系統(tǒng)的同步過程,同步過程不必借助于其他組件,完全與數(shù)據(jù)庫原生的高可用架構(gòu)融合,在降低了系統(tǒng)結(jié)構(gòu)的復(fù)雜度的基礎(chǔ)上,保證了系統(tǒng)整體高可用性和實(shí)時(shí)數(shù)據(jù)發(fā)布能力。
1.一種數(shù)據(jù)同步方法,包括:
2.根據(jù)權(quán)利要求1所述的方法,其中,所述目標(biāo)節(jié)點(diǎn)為所述數(shù)據(jù)庫的從節(jié)點(diǎn),以及
3.根據(jù)權(quán)利要求1或2所述的方法,其中,所述通過將所述目標(biāo)節(jié)點(diǎn)的原同步函數(shù)替換后的新同步函數(shù),將所述預(yù)寫入日志數(shù)據(jù)同步至目標(biāo)存儲(chǔ)系統(tǒng),包括:
4.根據(jù)權(quán)利要求1所述的方法,其中,還包括:
5.根據(jù)權(quán)利要求4所述的方法,其中,還包括:
6.根據(jù)權(quán)利要求5所述的方法,其中,所述參照所述目標(biāo)存儲(chǔ)系統(tǒng)中的日志數(shù)據(jù)對(duì)所述目標(biāo)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步,包括:
7.根據(jù)權(quán)利要求1所述的方法,其中,所述將所述預(yù)寫入日志數(shù)據(jù)同步至目標(biāo)存儲(chǔ)系統(tǒng),包括:
8.根據(jù)權(quán)利要求1所述的方法,其中,所述目標(biāo)存儲(chǔ)系統(tǒng)包括第三方存儲(chǔ)系統(tǒng)中的分布式存儲(chǔ)系統(tǒng)和/或消息隊(duì)列。
9.一種數(shù)據(jù)同步裝置,包括:
10.一種計(jì)算機(jī)可讀介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,其中,所述程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如權(quán)利要求1-8中任一所述的方法。
11.一種電子設(shè)備,包括:
12.一種計(jì)算機(jī)程序產(chǎn)品,包括:計(jì)算機(jī)程序,所述計(jì)算機(jī)程序在被處理器執(zhí)行時(shí)實(shí)現(xiàn)根據(jù)權(quán)利要求1-8中任一項(xiàng)所述的方法。