解析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:番邦进贡的代码解析完毕,还请欢迎广大码农爱好者向我推荐框架,我会择其精要、有趣者分享给大家。
解析mysqlbinlog日志_关于mysql-binlog日志解析框架相关推荐
- mysql binlog 统计_对MySQL binlog日志解析,统计每张表的DML次数
想要获取每天数据库每张表的DML的次数,统计热度表,可以使用该脚本 # coding:utf-8 # 解析binlog,统计热度表,表的DML个数 import sys import os # mys ...
- MySQL日志系列(2):binlog日志管理
目录 传送门 binlog 日志索引文件 查看当前日志文件SQL命令 binlog日志文件更新 binlog日志文件删除 自动删除日志文件配置 手动删除日志文件 暂时停止binlog日志 使用binl ...
- Mysql binlog日志及binlog恢复数据库操作
初识MySQL 日志binlog MySQL重要log,二进制日志文件,记录所有DDL和DML语句(除select),事件形式记录,包含语句所执行的消耗时间,事务安全型. DDL(数据库定义语言),主 ...
- MySQL binlog日志恢复数据详细操作步骤
场景 遇到后台数据批量误删,需要进行数据恢复. 准备 1.确定需要恢复数据的时间段 2.查看是否开启了binlog (1)终端执行命令,连接mysql mysql -h地址 -P端口号 -u账号 -p ...
- mysql历史日志文件_MySQL 历史 binlog 日志处理
MySQL 历史 binlog 日志处理 一.问题的引出 MySQL binlog 如果不清理会占用服务器的空间,那么怎么处理binlog日志呢 二.解决办法 1.物理删除 df -Th 查看磁盘空间 ...
- mysql binlog purge_正确清理mysql binlog日志方法
MySQL中的binlog日志记录了数据库中数据的变动,便于对数据的基于时间点和基于位置的恢复,但是binlog也会日渐增大,占用很大的磁盘空间,因此,要对binlog使用正确安全的方法清理掉一部分没 ...
- 设置自动清理mysql binlog日志和手动删除的方法
MYSQL主从复制(replication)采用 RBR 模式后,binlog的格式为"ROW",能解决很多原先出现的主键重复问题. 在一个繁忙的master db server上 ...
- elasticsearch 数据类型_基于 MySQL Binlog 的 Elasticsearch 数据同步实践
来源;马蜂窝 一.背景 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存 ...
- canal解析mysql日志异常_利用Canal解析mysql binlog日志
一.安装包下载(canal.deployer-x.x.x.tar.gz 官方建议使用1.0.22版本) 二.解压文件 tar -zxvf canal.deployer-1.0.22.tar.gz - ...
- 日志读取_实时数仓之Maxwell读取MySQL binlog日志
1.下载maxwell 2.解压maxwell 3.修改MySQL的配置文件my.cnf [root@hadoop000 ~]# cd /etc[root@hadoop000 etc]# vi my. ...
最新文章
- Androidstudio下Generate signed apk提示Error: Expected resource of type id [ResourceType]解决办法...
- 重磅!教育部再次审批179所高校新增本科AI专业
- 5分钟带你读懂“语音识别”工作原理
- 第五课 formal method 的课件和翻译,原来老师用latex打印的,pdf转成markdown,之后翻译的
- 用函数实现simulink_VCU/BMS基于模型的开发---Simulink 代码集成
- CSS样式:覆盖规则
- java 图片压缩 base64_图片改变像素,宽高,Base64编码处理
- stm32 JTAG和SWD的使用区别简要介绍
- 计算机网络-自顶向下方法(7th) 第五章 Problems 英文题目1-15+中文答案
- React Native (一) 入门实践
- 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_1_线程安全问题的概述...
- 1.MySql驱动的jar包下载
- mencoder 音视频格式转换
- julia 使用修改后的pkg
- 整理PC端微信文件夹
- 乾坤大挪移——使用PQ分区魔术师扩大C盘空间
- 视频:使用FFMpeg实现视频录制与压缩
- PS去水印的四种方式
- Proe Creo 二次开发之模型装配--在指定位置插入模型
- 切入点表达式的写法详解