技术领域
[0001] 本
发明涉及
数据处理技术领域,特别涉及一种数据库日志同步方法、装置、计算机设备及可读存储介质。
背景技术
[0002] 实时的数据分析展示,直接查询MySQL(一种数据库)表或频繁
抽取数据都会对MySQL产生很大的性能压
力,因此,目前采用的方法是同步MySQL的binlog日志,解析binlog并存入目标存储,避免对MySQL产生性能压力。
[0003] 例如,常规的binlog日志同步处理流程,如图1所示,需要使用同步工具(如Maxwall或Canal)读取Binlog,然后将Binlog同步至消息队列或JMQ(Java消息队列)等
中间件,来缓存数据,数据处理引擎(如Flink、Spark等
大数据计算引擎)消费消息队列的Binlog,并解析Binlog保存至目标存储库(Hbase、Elasticsearch等存储库)。该处理流程需要第三方同步工具、消息队列或JMQ等中间件以及数据处理引擎三方配合来完成,使得流程相对繁杂。
发明内容
[0004] 本发明
实施例提供了一种数据库日志同步方法,以解决
现有技术中binlog日志同步存在流程繁杂的技术问题。该方法包括:
[0005] 通过伪从
节点同步服务模拟MySQL的从节点,从MySQL中抽取binlog日志;
[0006] 通过所述伪从节点同步服务将抽取的binlog日志存储在所述处理引擎的存储模
块中;
[0007] 通过解析服务从存储模块中读取binlog日志并解析,将解析结果保存至目标存储中。
[0008] 本发明实施例还提供了一种数据库日志同步装置,以解决现有技术中binlog日志同步存在流程繁杂的技术问题。该装置包括:
[0009] 数据提取单元,用于通过伪从节点同步服务模拟MySQL的从节点,从MySQL中抽取binlog日志;
[0010] 存储单元,用于通过所述伪从节点同步服务将抽取的binlog日志存储在所述处理引擎的存储模块中;
[0011] 数据解析单元,用于通过解析服务从存储模块中读取binlog日志并解析,将解析结果保存至目标存储中。
[0012] 本发明实施例还提供了一种计算机设备,包括
存储器、处理器及存储在存储器上并可在处理器上运行的
计算机程序,所述处理器执行所述计算机程序时实现上述任意的数据库日志同步方法,以解决现有技术中binlog日志同步存在流程繁杂的技术问题。
[0013] 本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的数据库日志同步方法的计算机程序,以解决现有技术中binlog日志同步存在流程繁杂的技术问题。
[0014] 在本发明实施例中,提出了在处理引擎中运行的上述数据库日志同步方法,通过伪从节点同步服务模拟MySQL的从节点,从MySQL中抽取binlog日志,避免通过第三方同步工具抽取binlog日志,通过所述伪从节点同步服务将抽取的binlog日志存储在所述处理引擎的存储模块中,避免引入消息队列或JMQ等中间件,最后通过解析服务从存储模块中读取binlog日志并解析,将解析结果保存至目标存储中,使得整个MySQL的binlog日志同步过程都可以在处理引擎中通过程序完成,避免引入第三方同步工具、消息队列或JMQ等中间件等额外的组件,同时在MySQL的binlog日志同步过程中可以避免多方组件配合,有利于简化处理流程。
附图说明
[0015] 此处所说明的附图用来提供对本发明的进一步理解,构成本
申请的一部分,并不构成对本发明的限定。在附图中:
[0016] 图1是提供的一种现有技术中binlog日志的处理流程示意图;
[0017] 图2是本发明实施例提供的一种数据库日志同步方法的
流程图;
[0018] 图3是本发明实施例提供的一种上述数据库日志同步方法的流程示意图;
[0019] 图4是本发明实施例提供的一种计算机设备的结构
框图;
[0020] 图5是本发明实施例提供的一种数据库日志同步装置的结构框图。
具体实施方式
[0021] 为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
[0022] 在本发明实施例中,提供了一种数据库日志同步方法,该方法可以运行在处理引擎中,如图2所示,该方法包括:
[0023] 步骤202:通过伪从节点同步服务模拟MySQL的从节点,从MySQL中抽取binlog日志;
[0024] 步骤204:通过所述伪从节点同步服务将抽取的binlog日志存储在所述处理引擎的存储模块中;
[0025] 步骤206:通过解析服务从存储模块中读取binlog日志并解析,将解析结果保存至目标存储中。
[0026] 由图2所示的流程可知,在本发明实施例中,提出了在处理引擎中运行的上述数据库日志同步方法,通过伪从节点同步服务模拟MySQL的从节点,从MySQL中抽取binlog日志,避免通过第三方同步工具抽取binlog日志,通过所述伪从节点同步服务将抽取的binlog日志存储在所述处理引擎的存储模块中,避免引入消息队列或JMQ等中间件,最后通过解析服务从存储模块中读取binlog日志并解析,将解析结果保存至目标存储中,使得整个MySQL的binlog日志同步过程都可以在处理引擎中通过程序完成,避免引入第三方同步工具、消息队列或JMQ等中间件等额外的组件,同时在MySQL的binlog日志同步过程中可以避免多方组件配合,有利于简化处理流程。
[0027] 具体实施时,伪从节点同步服务可以使用第三方的
接口组件mysql-binlog-connector-java模拟MySQL的从节点,从MySQL抽取、解析binlog日志。伪从节点同步服务可以根据MySQL的主机、端口、账号密码、表名、binlog的索引和binlog的偏移量等选项,采用数据同步线程监听binlog日志,模拟MySQL的从节点,进而从Master节点同步binlog日志。
[0028] 具体实施时,为了保证数据同步的性能,在本实施例中,如图3所示,通过所述伪从节点同步服务将抽取的binlog日志存储在所述处理引擎的存储模块中,包括:
[0029] 通过所述伪从节点同步服务以预写日志的方式将抽取的binlog日志存储在所述处理引擎的存储模块中。伪从节点同步服务以预写日志的方式将抽取的binlog日志存储在所述处理引擎的存储模块中,此时并不对数据做任何处理,后续解析服务从存储模块中读取binlog日志并解析,避免消息队列/JMQ等中间件的引入,也避免频繁地从MySQL的binlog拉取数据,因为从MySQL直接消费数据会产生不必要的磁盘数据读取、网络IO等消耗性能的操作,从而可以保证性能,例如,当数据异常或重新消费binlog时,可以首先从预写日志方式的处理引擎的存储模块中消费数据,如果预写日志方式的数据缺失,则直接从MySQL的binlog拉取数据消费,避免每次从MySQL同步日志。具体的,该处理引擎的存储模块可以是本地磁盘、Hadoop分布式文件系统等。
[0030] 具体实施时,为了进一步地保证数据抽取、解析的性能和
稳定性,在本实施例中,上述MySQL的binlog日志同步方法还增加的检查点使用,例如,如图3所示,上述方法还包括:
[0031] 每次将抽取的binlog日志存储在所述处理引擎的存储模块中时,通过所述伪从节点同步服务将存储模块中binlog日志的同步偏移量保存在检查点中;
[0032] 每次从存储模块中读取binlog日志时,通过所述解析服务将存储模块中binlog日志的解析偏移量保存在检查点中。
[0033] 具体实施时,所述同步偏移量可以为将抽取的binlog日志存储在所述存储模块中时当前存储模块中最大的偏移量(例如,offset);所述解析偏移量可以为从存储模块中读取binlog日志时当前存储模块中最大的偏移量(例如,offset)。具体的,每条日志消息对应一个偏移量。
[0034] 具体实施时,每次将抽取的binlog日志存储在所述处理引擎的存储模块中时,通过所述伪从节点同步服务将存储模块中binlog日志的同步偏移量保存在检查点中之后,可以在下一轮的数据抽取时基于上次保存的同步偏移量(偏移量增量)来抽取。每次从存储模块中读取binlog日志时,通过所述解析服务将存储模块中binlog日志的解析偏移量保存在检查点中之后,下一轮的数据解析可以从上次保存的解析偏移量(偏移量
位置)开始。
[0035] 具体实施时,在存储同步偏移量和解析偏移量的过程中,获取初始的偏移量的方法可以是:使用MySQL的mysqlbinlog工具,
指定开始和结束时间等选项,进而获取初始的binlog的index以及偏移量。
[0036] 可指定binlog的位置等信息:
[0037] val optionsMap=Map(
[0038] "host"->"127.0.0.1",//指定主机名
[0039] "port"->"3306",//指定端口
[0040] "userName"->"root",//指定用户名
[0041] "password"->"123456",//指定密码
[0042] "binlogindex"->"4",//指定binlog的索引
[0043] "偏移量"->"4"//指定日志的偏移量
[0044] )
[0045] 伪代码示例:
[0046]
[0047] 具体实施时,解析服务可以借助第三方的接口组件mysql-binlog-connector-java,从预写日志(本地磁盘、Hadoop分布式文件系统等)读取binlog日志,并对binlog日志进行解析,解析每条日志记录的操作类型可以是插入、更新、删除等,并将操作类型更新到日志记录中,进而写到目标存储中。
[0048] 具体的,生成的解析结果为MySQL的执行SQL语句,如插入、更新、删除语句等。可基于下游的存储,对插入、更新、删除等语句分别执行相关操作。下游的存储需要执行插入和更新等操作,因此下游存储可为Kudu、Elasticsearch、Hbase、Tidb等。
[0049] 在本实施例中,提供了一种计算机设备,如图4所示,包括存储器402、处理器404及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的数据库日志同步方法。
[0050] 具体的,该计算机设备可以是计算机终端、
服务器或者类似的运算装置。
[0051] 在本实施例中,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的数据库日志同步方法的计算机程序。
[0052] 具体的,计算机可读存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机可读存储介质的例子包括,但不限于
相变内存(PRAM)、静态
随机存取存储器(SRAM)、
动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、
只读存储器(ROM)、
电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他
磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备
访问的信息。按照本文中的界定,计算机可读存储介质不包括暂存电脑可读媒体(transitory media),如调制的数据
信号和载波。
[0053] 基于同一发明构思,本发明实施例中还提供了一种数据库日志同步装置,如下面的实施例所述。由于数据库日志同步装置解决问题的原理与数据库日志同步方法相似,因此数据库日志同步装置的实施可以参见数据库日志同步方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的
软件和/或
硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
[0054] 图5是本发明实施例的数据库日志同步装置的一种结构框图,如图5所示,该装置包括:
[0055] 数据提取单元502,用于通过伪从节点同步服务模拟MySQL的从节点,从MySQL中抽取binlog日志;
[0056] 存储单元504,用于通过所述伪从节点同步服务将抽取的binlog日志存储在所述处理引擎的存储模块中;
[0057] 数据解析单元506,用于通过解析服务从存储模块中读取binlog日志并解析,将解析结果保存至目标存储中。
[0058] 在一个实施例中,所述存储单元,用于通过所述伪从节点同步服务以预写日志的方式将抽取的binlog日志存储在所述处理引擎的存储模块中。
[0059] 在一个实施例中,上述装置还包括:
[0060] 偏移量存储单元,用于每次将抽取的binlog日志存储在所述处理引擎的存储模块中时,通过所述伪从节点同步服务将存储模块中binlog日志的同步偏移量保存在检查点中;每次从存储模块中读取binlog日志时,通过所述解析服务将存储模块中binlog日志的解析偏移量保存在检查点中。
[0061] 在一个实施例中,所述同步偏移量为将抽取的binlog日志存储在所述存储模块中时当前存储模块中最大的偏移量;所述解析偏移量为从存储模块中读取binlog日志时当前存储模块中最大的偏移量。
[0062] 本发明实施例实现了如下技术效果:提出了在处理引擎中运行的上述数据库日志同步方法,通过伪从节点同步服务模拟MySQL的从节点,从MySQL中抽取binlog日志,避免通过第三方同步工具抽取binlog日志,通过所述伪从节点同步服务将抽取的binlog日志存储在所述处理引擎的存储模块中,避免引入消息队列或JMQ等中间件,最后通过解析服务从存储模块中读取binlog日志并解析,将解析结果保存至目标存储中,使得整个MySQL的binlog日志同步过程都可以在处理引擎中通过程序完成,避免引入第三方同步工具、消息队列或JMQ等中间件等额外的组件,同时在MySQL的binlog日志同步过程中可以避免多方组件配合,有利于简化处理流程。
[0063] 显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成
电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。
[0064] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何
修改、等同替换、改进等,均应包含在本发明的保护范围之内。