解析mysqlbinlog日志_关于mysql-binlog日志解析框架

欢迎广大码农爱好者向我推荐框架,我会择其精要、有趣者分享给大家。

今天下午,有同学献出了一款软件,说是海外澳洲番邦向朕进贡的,于是品尝了一番。

软件名称:mysql-binlog-connector

软件作者:Stanley Shyiko,个人开发性质,疑似澳大利亚番邦人士

中文名称:mysql-binlog日志解析框架

开发时间:2013~2015年

功能简介:将mysql的日志格式设置为row模式,使用mysql-binlog-connector对日志进行读取,将读取到的mysql操作事件进行解析封装,最终封装为事件对象,进而对mysql的日志进行处理。

类似框架:canal,但区别在于canal是模拟mysqlslave端,主动从master端拉取日志数据。而mysql-binlog-connector只是一个解析库,它有两种模式:BinaryLogFileReader日志读取模式,和BinaryLogClient客户端访问模式。但似乎,BinaryLogFileReader日志读取模式更适合于可中断可指定position读取的的模式。

使用示例:

maven引入后

import com.github.shyiko.mysql.binlog.BinaryLogFileReader;

import com.github.shyiko.mysql.binlog.event.Event;

import com.github.shyiko.mysql.binlog.event.deserialization.ChecksumType;

import com.github.shyiko.mysql.binlog.event.deserialization.EventDeserializer;

import java.io.File;

import java.io.IOException;

public class TTTT {

public static void main(String[] args) throws IOException {

String filePath="D:\\DATA\\mysql-bin.000987";

File binlogFile = new File(filePath);

EventDeserializer eventDeserializer = new EventDeserializer();

eventDeserializer.setChecksumType(ChecksumType.CRC32);

BinaryLogFileReader reader = new BinaryLogFileReader(binlogFile, eventDeserializer);

for (Event event; (event = reader.readEvent()) != null; ) {

System.out.println(event.toString());

}

reader.close();

}

}

上述代码,实现了针对某个sql日志文件进行读取,解析mysql事件,并封装为Event的功能。

BinaryLogClient client = new BinaryLogClient("hostname", 3306, "username", "password");

client.registerEventListener(new BinaryLogClient.EventListener() {

@Override

public void onEvent(Event event) {

}

});

client.connect();

上述代码,实现了通过账号密码连接到数据库上,并实时监听事件,并触发回调的功能

内部原理:内部原理,核心在于EventDeserializer这个对象

内部具有三个对象

头部解析:eventHeaderDeserializer

默认数据解析:defaultEventDataDeserializer

事件类型对应解析器Map:eventDataDeserializers

其中头部解析为EventHeaderV4Deserializer

而eventDataDeserializers根据不同的MysqlEventType有不同的实现:

以最常见的insert,对应的是EventType.Write_ROWS ,顺序为23

使用的是new WriteRowsEventDataDeserializer(tableMapEventByTableId)

解析时调用了deserialize方法

eventData.setIncludedColumns(inputStream.readBitSet(numberOfColumns, true));

eventData.setRows(deserializeRows(eventData.getTableId(),eventData.getIncludedColumns(), inputStream));

这两句中对日志格式进行解析,封装为Rows对象,然后返回

之后就成功实现了ROW日志的解析。

框架缺陷:

任何一个框架都有缺陷,或者说不能用“缺陷”这种词,而应该用“待改进内容”来描述,对于mysql-binlog-connector来说,待改进内容如下:

1)没有将mysql的日志监控部分考虑进去。在示例中是直接FIle读取日志文件,但实际工作中,应该还有:文件夹监控,新日志文件出现时替换为新日志文件,日志文件是追加的,而此框架没有针对追加模式处理的内容。

因此建议:需要开发一套新的框架,功能如下:

对某个日志文件夹进行监控

出现新的日志文件时,自动追加到流中

具有唯一指针,用于记录日志文件读取与处理位置

日志文件可以远程传输到新的服务器,在新的服务器上执行后续操作

在新服务器上的服务端,可以提供更多开放性功能

2)Event的后续处理,需要加强这套框架的应用场景,如:非侵入式数据库监控、核心数据表数据同步,跨机房跨洲际数据库同步等

3)鉴于“数据同步、跨机房跨洲际数据库同步、单向回环冲突解决方案”在otter中已经做的挺不错的了,目测mysql-binlog-connector的使用场景将集中在非侵入式数据库监控和核心数据同步了

PS:番邦进贡的代码解析完毕,还请欢迎广大码农爱好者向我推荐框架,我会择其精要、有趣者分享给大家。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值