一种用于获取MySQLbinlog增量日志的方法和装置的制造方法

文档序号:9235451阅读:325来源:国知局
一种用于获取MySQL binlog增量日志的方法和装置的制造方法
【技术领域】
[0001] 本申请涉及MySQL数据库技术,具体涉及一种用于获取MySQLbinlog增量日志的 方法。本申请同时提供一种用于获取MySQLbinlog增量日志的装置。
【背景技术】
[0002] MyS化数据库有各种不同类型的日志文件:错误日志、二进制日志、查询日志、慢 查询日志、redo日志等,根据该些日志可W查询MyS化数据库执行的操作W及状态等信息, 对于MyS化数据库的管理与维护来说,该些日志文件都是不可或缺的。
[0003] 其中二进制日志(binlog),记录了对MyS化数据库的更改操作,例如:创建数据库 或表(create)、插入操作(insert)、更新操作(update)、删除操作(insert)等,每个更改操 作都W-条记录的形式写入二进制日志文件中,每条记录中都包含了当前记录更新的时间 戳、该记录在当前二进制日志文件中的位置(即;偏移量)W及与数据库更改操作相关的其 他信息。MyS化数据库通常有一个或者多个二进制日志文件,不同的二进制日志文件通过文 件扩展名采用不同的数字编号形式加W区分,例如;mysql-bin. 00001。使用上述二进制日 志文件,一方面可W实现MyS化数据库的数据恢复功能,另一方面可W通过主备复制实现 MyS化主备数据库的数据一致性。
[0004] MyS化使用二进制日志文件进行主备复制的基本过程是该样的:备用数据库与主 数据库建立连接,并请求获取从指定二进制日志文件的指定位置之后的日志记录;主数据 库将位于指定二进制日志文件中的指定位置之后的日志记录,返回给备用数据库;备用数 据库接收到主数据库返回的数据后,从中解析出在主数据库上执行的更改操作,并在备用 数据库上执行该些更改操作,也就是说,在主数据库和备用数据库上执行同样的数据库操 作,从而通过主备复制过程实现了主备数据库的数据一致性。
[0005] 由此可见,MyS化主数据库支持采用增量方式,向其他需要获取二进制日志数据的 备用数据库或应用程序提供二进制日志数据;相应的,需要从MyS化主数据库获取二进制 日志数据的备用数据库或者其他应用程序则需要在获取增量日志数据的请求中,明确地指 定希望从中获取日志数据的二进制日志文件的文件名、W及所需获取的日志数据在所述二 进制日志文件中的偏移量,该样才能够正确地从主数据库获取所需的二进制日志数据。
[0006] 上述通过指定"文件名+偏移量"来获取增量日志的方式,有助于减少主数据库 与备数据库或者其他获取二进制日志数据的应用程序之间的交互数据量,减少对带宽的占 用,但是在具体实施过程存在一定的缺陷。对于需要从主数据库抓取增量二进制日志数据、 W满足增量订阅或消费等相关业务需求的应用程序来说,通常情况下可W采用与备数据库 类似的方式从主数据库抓取增量二进制日志数据。但是在主数据库故障导致主备数据库切 换的情况下,由于主数据库和备数据库的二进制日志文件是彼此独立编号的,主备之间不 存在对应关系,而抓取增量日志的应用程序使用的起始位点信息(文件名+偏移量)是和主 数据库相关联的,因此无法在备用数据库(当前的主数据库)的二进制日志文件中找到与原 起始位点信息相对应的起始位点,从而导致所述应用程序无法继续抓取增量日志数据或者 抓取到错误的增量日志数据。

【发明内容】

[0007] 本申请提供一种用于获取MySQL binlog增量日志的方法,W解决现有技术采用 "文件名+偏移量"指定位点的方式在MyS化主数据库变更的情况下无法正确获取增量日志 的问题。本申请另外提供一种用于获取MySQL binlog增量日志的装置。
[0008] 本申请提供一种用于获取MySQL binlog增量日志的方法,包括:
[0009] 在当前MyS化数据库的二进制日志文件集合中,查找其时间戳不早于预先指定的 时间戳的第一个记录;
[0010] 根据该记录所在二进制日志文件的文件名和该记录在所述文件中的位置,获取所 述当前MyS化数据库的增量日志。
[0011] 可选的,所述在当前MyS化数据库的二进制日志文件集合中,查找其时间戳不早 于预先指定的时间戳的第一个记录,包括:
[0012] 在所述当前MyS化数据库的二进制日志文件集合中,查找其包含的第一个记录的 时间戳不晚于所述预先指定的时间戳的最后一个文件;
[0013] 在所述最后一个文件中查找其时间戳不早于所述预先指定的时间戳的第一个记 录。
[0014] 可选的,执行在所述当前MyS化数据库的二进制日志文件集合中,查找其包含的 第一个记录的时间戳不晚于所述预先指定的时间戳的最后一个文件的步骤时,采用的是二 分查找法。
[0015] 可选的,所述方法包括:
[0016] 与所述当前MyS化数据库建立数据连接;
[0017] 获取所述当前MyS化数据库的二进制日志文件列表;
[0018] 相应的,所述在当前MyS化数据库的二进制日志文件集合中,查找其时间戳不早 于预先指定的时间戳的第一个记录,就是在上述获取的二进制日志文件列表包含的文件集 合中执行的查找操作。
[0019] 可选的,所述与所述当前MyS化数据库建立数据连接包括:
[0020] 获取所述当前MyS化数据库所在服务器的IP地址和所述当前MyS化数据库提供 数据库服务的端口号;
[0021] 使用所述IP地址和所述端口号与所述当前MyS化数据库建立数据连接。
[0022] 可选的,所述获取所述当前MyS化数据库所在服务器的IP地址和所述当前MySQL 数据库提供数据库服务的端口号,采用如下方式实现:
[0023] 读取元信息库中与所述当前MyS化数据库相关的信息,并从中提取所述IP地址和 所述端口号。
[0024] 可选的,所述方法包括:
[0025] 记录从MyS化主数据库获取的增量日志的最后一个记录的时间戳,作为所述预先 指定的时间戳。
[0026] 可选的,在所述记录从MyS化主数据库获取的增量日志的最后一个记录的时间 戳,作为所述预先指定的时间戳的步骤之前,执行下述步骤:
[0027] 判断MyS化数据库系统是否执行了主备切换操作;
[0028] 若是,将接替所述MyS化主数据库继续提供数据库服务的MyS化备用数据库,作为 所述当前MyS化数据库。
[0029] 可选的,所述判断MyS化数据库系统是否执行了主备切换操作,采用如下方式实 现:
[0030] 监测存储在元信息库中的、用于记录MyS化主数据库所在服务器的IP地址的字段 是否发生变化;若是,则判断MyS化数据库系统执行了主备切换操作。
[0031] 本申请还提供一种用于获取MySQL binlog增量日志的装置,包括:
[0032] 记录查找单元,用于在当前MyS化数据库的二进制日志文件集合中,查找其时间 戳不早于预先指定的时间戳的第一个记录;
[0033] 增量日志获取单元,用于根据所述记录查找单元找到的记录所在二进制日志文件 的文件名和该记录在所述文件中的位置,获取所述当前MyS化数据库的增量日志。
[0034] 可选的,所述记录查找单元包括:
[0035] 文件查找子单元,用于在所述当前MyS化数据库的二进制日志文件集合中,查找 其包含的第一个记录的时间戳不晚于所述预先指定的时间戳的最后一个文件;
[0036] 记录查找执行子单元,用于在所述最后一个文件中查找其时间戳不早于所述预先 指定的时间戳的第一个记录。
[0037] 可选的,所述文件查找子单元具体用于,采用二分查找法,在所述当前MyS化数据 库的二进制日志文件集合中,查找其包含的第一个记录的时间戳不晚于所述预先指定的时 间戳的最后一个文件。
[0038] 可选的,所述装置包括:
[0039] 连接建立单元,用于与所述当前MyS化数据库建立数据连接;
[0040] 文件列表获取单元,用于获取所述当前MyS化数据库的二进制日志文件列表;
[0041] 相应的,所述记录查找单元在所述文件列表获取单元输出的二进制日志文件列表 包含的文件集合中执行查找操作。
[0042] 可选的,所述连接建立单元包括:
[0043] 连接信息获取子单元,用于获取所述当前MyS化数据库所在服务器的IP地址和所 述当前MyS化数据库提供数据库服务的端口号;
[0044] 连接建立执行子单元,用于使用所述连接信息获取子单元输出的IP地址和端口 号与所述当前MyS化数据库建立数据连接。
[0045] 可选的,所述连接信息获取子单元具体用于,读取元信息库中与所述当前MySQL 数据库相关的信息,并从中提取所述IP地址和所述端口号。
[0046] 可选的,所述装置包括:
[0047] 时间戳记录单元,用于记录从MyS化主数据库获取的增量日志的最后一个记录的 时间戳,作为所述预先指定的时间戳。
[0048] 可选的,所述装置包括:
[0049] 主备切换判断单元,用于判断MyS化数据库系统是否执行了主备切换操作;
[0050] 当前数据库选择单元,用于当所述主备切换判断单元的输出为"是"时,将接替所 述MyS化主数据库继续提供数据库服务的MyS化备用数据库,作为所述当前MyS化数据库。
[0051] 可选的,所述主备切换判断单元具体用于,监测存储在元信息库中的、用于记录 MyS化主数据库所在服务器的IP地址的字段是否发生变化;若是,则判断MyS化数据库系 统执行了主备切换操作。
[0052] 与现有技术相比,本申请具有W下优点:
[005引本申请的用于获取MySQL binlog增量日志的方法,没有采用现有技术根据文件 名和偏移量确
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1