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

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

软件名称: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日志解析框架相关推荐

  1. mysql binlog 统计_对MySQL binlog日志解析,统计每张表的DML次数

    想要获取每天数据库每张表的DML的次数,统计热度表,可以使用该脚本 # coding:utf-8 # 解析binlog,统计热度表,表的DML个数 import sys import os # mys ...

  2. MySQL日志系列(2):binlog日志管理

    目录 传送门 binlog 日志索引文件 查看当前日志文件SQL命令 binlog日志文件更新 binlog日志文件删除 自动删除日志文件配置 手动删除日志文件 暂时停止binlog日志 使用binl ...

  3. Mysql binlog日志及binlog恢复数据库操作

    初识MySQL 日志binlog MySQL重要log,二进制日志文件,记录所有DDL和DML语句(除select),事件形式记录,包含语句所执行的消耗时间,事务安全型. DDL(数据库定义语言),主 ...

  4. MySQL binlog日志恢复数据详细操作步骤

    场景 遇到后台数据批量误删,需要进行数据恢复. 准备 1.确定需要恢复数据的时间段 2.查看是否开启了binlog (1)终端执行命令,连接mysql mysql -h地址 -P端口号 -u账号 -p ...

  5. mysql历史日志文件_MySQL 历史 binlog 日志处理

    MySQL 历史 binlog 日志处理 一.问题的引出 MySQL binlog 如果不清理会占用服务器的空间,那么怎么处理binlog日志呢 二.解决办法 1.物理删除 df -Th 查看磁盘空间 ...

  6. mysql binlog purge_正确清理mysql binlog日志方法

    MySQL中的binlog日志记录了数据库中数据的变动,便于对数据的基于时间点和基于位置的恢复,但是binlog也会日渐增大,占用很大的磁盘空间,因此,要对binlog使用正确安全的方法清理掉一部分没 ...

  7. 设置自动清理mysql binlog日志和手动删除的方法

    MYSQL主从复制(replication)采用 RBR 模式后,binlog的格式为"ROW",能解决很多原先出现的主键重复问题. 在一个繁忙的master db server上 ...

  8. elasticsearch 数据类型_基于 MySQL Binlog 的 Elasticsearch 数据同步实践

    来源;马蜂窝 一.背景 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存 ...

  9. canal解析mysql日志异常_利用Canal解析mysql binlog日志

    一.安装包下载(canal.deployer-x.x.x.tar.gz  官方建议使用1.0.22版本) 二.解压文件 tar -zxvf canal.deployer-1.0.22.tar.gz - ...

  10. 日志读取_实时数仓之Maxwell读取MySQL binlog日志

    1.下载maxwell 2.解压maxwell 3.修改MySQL的配置文件my.cnf [root@hadoop000 ~]# cd /etc[root@hadoop000 etc]# vi my. ...

最新文章

  1. Androidstudio下Generate signed apk提示Error: Expected resource of type id [ResourceType]解决办法...
  2. 重磅!教育部再次审批179所高校新增本科AI专业
  3. 5分钟带你读懂“语音识别”工作原理
  4. 第五课 formal method 的课件和翻译,原来老师用latex打印的,pdf转成markdown,之后翻译的
  5. 用函数实现simulink_VCU/BMS基于模型的开发---Simulink 代码集成
  6. CSS样式:覆盖规则
  7. java 图片压缩 base64_图片改变像素,宽高,Base64编码处理
  8. stm32 JTAG和SWD的使用区别简要介绍
  9. 计算机网络-自顶向下方法(7th) 第五章 Problems 英文题目1-15+中文答案
  10. React Native (一) 入门实践
  11. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_1_线程安全问题的概述...
  12. 1.MySql驱动的jar包下载
  13. mencoder 音视频格式转换
  14. julia 使用修改后的pkg
  15. 整理PC端微信文件夹
  16. 乾坤大挪移——使用PQ分区魔术师扩大C盘空间
  17. 视频:使用FFMpeg实现视频录制与压缩
  18. PS去水印的四种方式
  19. Proe Creo 二次开发之模型装配--在指定位置插入模型
  20. 切入点表达式的写法详解

热门文章

  1. LeetCode 110. Balanced Binary Tree
  2. 程序员面试金典——18.12最大和子矩阵
  3. Ubuntu怎么截图?一些快捷键备忘
  4. Python: 生成器,yield
  5. express 模板 及 文件上传
  6. 2.熟悉LINUX的基本操作
  7. 给网页添加跟随你鼠标移动的线条动画
  8. Ogre1.8.1 Basic Tutorial 6 - The Ogre Startup Sequence
  9. 接活,你为啥不行,之懒
  10. 向虚拟机发短信(android SMS 调试)