Mysql日志抽取与解析

本文介绍了MySQL日志抽取与解析的过程,重点讨论了tracker如何每分钟记录checkpoint位点,并概述了数据包的架构和数据包体格式。内容涉及到MySQL协议的使用,以及在单机和分布式场景下的应用。提供了项目的GitHub源码链接。
摘要由CSDN通过智能技术生成
1. 摘要:
Mysql日志抽取与解析正如名字所将的那样,分抽取和解析两个部分。这里Mysql日志主要是指binlog日志。二进制日志由配置文件的log-bin选项负责启用,Mysql服务器将在数据根目录创建两个新文件XXX-bin.001和XXX-bin.index,若配置选项没有给出文件名,Mysql将使用主机名称命名这两个文件,其中.index文件包含一份全体日志文件的清单。Mysql会把用户对所有数据库的内容和结构的修改情况记入XXX-bin.n文件,而不会记录SELECT和没有实际操作意义的语句。
2. 设计概要:
本项目主要包括两个独立的模块:1、日志抽取(mysql-tracker);2、日志解析(mysql-parser)。日志抽取主要负责与mysql进行交互,通过socket连接以及基于mysql的开源协议数据报文,来进行从mysql主库上dump相应的日志数据下来。而日志解析主要负责与日志抽取模块交互,通过将dump下来的bytes类型的数据,根据mysql协议,对bytes数据进行解析,并封装成易读的event对象。
2.1  流程概要:
mysql-tracker 总体流程设计:
tracker与mysql交互:
1. 建立socket连接
2. 加载上次退出时的位点信息(从checkpoint表中加载)
3. 利用socket连接发送基于mysql协议的数据包+checkpoint表中的位点信息,创建mysql主库的binlog dump线程
4. 利用socket接受(监听)mysql主库传过来的数据包
5. 解析数据包(有多种形式,OK包,EOF包,ERROR包,EVENT包等等)
6. 如果有EVENT包,将基于byte的数据包解析成event对象
7. 将对象存入List或Queue里面
tracker与hbase交互:
1. 从queue中接收固定量数据(上限:防止内存溢出,下限:防止频繁I/O),或固定时间数据(防止内存溢出)。
2. 这里的数据就是event对象
3. 将event对象序列化,存入hbase(protobuf 和 entry)
4. 存入过程中,保证位点确认机制,如果有关于mysql binlog 的标志性位点,则将该event存入hbase后(注意这里有对特殊xid位点的确认机制,而parser是没有的,直接确认即可),然后再将该event的位点信息存入checkpoint表(维护各种位点信息:包括mysql binlog位点,event表(存如序列化后的event)位点,entry表(存入反序列化后的event)位点)
5. 也就是说只要是存入hbase实体数据,都要伴随位点确认机制。这里tracker确认两个方面的位点:mysql binlog 位点(xid:binlog file name + next position) + event表位点(tracker写位点:row key)

tracker 每分钟记录位点:

1. 每分中固定时间记录确认的checkpoint位点(可能有重复,长时间没有数据fetch重复最多)

mysql-parser 总体流程设计:(设计思路非常类似,只不过是mysql binlog变成了event表,parser fetch数据从这里fetch)
parser与event表交互:
1. 建立hbase连接
2. 加载上次退出的位点信息(从checkpoint表中加载)
3. 通过hbase连接+checkpoint表中的位点信息,不断监听event表一旦event表有更新,就从event表中把序列化的event fetch下来
4. 得到的序列化event(bytes) 存入List或Queue里面。
parser与hbase交互:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值