我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何修复解析MySQL8.x binlog错位的问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何修复解析MySQL8.x binlog错位的问题

本篇内容主要讲解“如何修复解析MySQL8.x binlog错位的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何修复解析MySQL8.x binlog错位的问题”吧!

写在前面

MySQL是互联网行业使用的最多的关系型数据库之一,而且MySQL又是开源的,对于MySQL的深入研究,能够加深我们对于数据库原理的理解。自从开源了mykit-data之后,不少小伙伴试用后,反馈mykit-data无法正确的解析MySQL8的binlog。于是我测试了下,mykit-data在解析MySQL5.x的binlog时,没有啥问题,能够正确的解析出结果数据。然而,在解析MySQL8.x的binlog时,总是与binlog日志位数相差12位而导致解析失败。

文章已收录到:

https://github.com/sunshinelyz/technology-binghe

https://gitee.com/binghe001/technology-binghe

问题修复

今天太晚了,我还在研究MySQL  8.0.20的源码,问题的修复过程后续再写一篇详细的文章来与小伙伴们分享下。这里,我就直接说我是如何解决这个问题的。

MySQL5.x binlog的解析结果与MySQL8.x binlog的解析结果总是存在位数偏差,框架原本的代码直接解析MySQL  5.x是没啥问题的,在解析MySQL 8.x的时候出现位数错位的问题。

期间,我几乎翻阅了MySQL的所有官方文档,把mykit-data中关于解析binlog日志的功能重新写了一遍,解析MySQL5.x没问题,解析MySQL8.x还是错位。

到底哪里出了问题呢?就在对于问题的解决一筹莫展的时候,突然,想到一个思路:解决MySQL8.x  binlog的时候不是总错位吗?那我就把多余位数的binlog数据读取出来,直接忽略掉,使后续binlog的解析操作对齐不就行了吗?

赶紧尝试一下,于是我在mykit-data框架的源码中,添加了如下代码。

如何修复解析MySQL8.x binlog错位的问题

上面代码是对解析MySQL  binlog位数的校验和读取的封装,当读取的binlog位数未达到读取的限制位数时,一直读取binlog的数据,直到读取的binlog位数达到读取的限制位数位置。具体内部的逻辑,小伙伴们可以阅读mykit-data的源码。

加上这个逻辑后,进行测试验证,解析MySQL 8.x数据库的binlog竟然成功了!!困扰我几天的问题就这么在不经意间解决了!!

从解决这个问题的结果来看,MySQL8.x的binlog在本质上比MySQL5.x的binlog位数要长,中间会拼接用来分隔不同事件位的标识,我们在解析MySQL8.x的binlog日志时,可直接忽略掉这些分隔不同事件位的标识,目的就是让binlog的解析位对齐,从而能够正确的解析出下一个事件。而这样处理,也不会影响解析结果。

很多时候就是这样,当你苦于解决某个问题,迟迟找不到解决方案而一筹莫展时,在某个不经意的瞬间,就会无意中解决这个棘手的问题,但前提是你需要深刻理解它的原理并尝试各种方式和方法来解决它!

关于mykit-data

mykit-data是一款完全开源的数据异构中间件,支持插件化、可视化的数据异构框架,支持MySQL到MySQL、MySQL到Oracle、Oracle到MySQL、Oracle到Oracle的全量、实时/定时增量数据同步。完全的插件化、可视化操作。通过日志最大限度的避免同步过程中的数据丢失。支持失败重试,人工干预,支持查看同步的数据和详细的日志信息。

目前支持MySQL5.x、MySQL8.x,Oracle 11g及以上版本。后续会以插件的形式支持更多的异构数据源。例如,后续会增加:SQL  Server、Postgre SQL、Redis、ES、Hadoop、HBase、MongoDB、TiDB等数据源。

到此,相信大家对“如何修复解析MySQL8.x binlog错位的问题”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何修复解析MySQL8.x binlog错位的问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何解决定位并修复Go 中的内存泄露问题

这篇文章将为大家详细讲解有关如何解决定位并修复Go 中的内存泄露问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Google Cloud Go 客户端库 [1] 通常在后台使用 gRPC 来连接 Goo
2023-06-25

如何解决电脑开机提示自动修复的问题

这篇文章主要为大家展示了“如何解决电脑开机提示自动修复的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决电脑开机提示自动修复的问题”这篇文章吧。首先大家一定会和我一样想这个问题,为什么
2023-06-28

如何解决Swagger2返回map复杂结构不能解析的问题

这篇文章主要介绍“如何解决Swagger2返回map复杂结构不能解析的问题”,在日常操作中,相信很多人在如何解决Swagger2返回map复杂结构不能解析的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如
2023-06-20

如何解决mac环境使用sed修改文件出错的问题

小编给大家分享一下如何解决mac环境使用sed修改文件出错的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!sed是linux命令,用于处理文件内容(修改,替换等),mac中都可以使用,但发现相同的替换命令在linux可
2023-06-09

如何解决Ubuntu中修复默认启用HDMI后没有声音的问题

本篇内容主要讲解“如何解决Ubuntu中修复默认启用HDMI后没有声音的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决Ubuntu中修复默认启用HDMI后没有声音的问题”吧!声音问题
2023-06-16

如何解决使用stream将list转map时key重复导致报错的问题

这篇文章将为大家详细讲解有关如何解决使用stream将list转map时key重复导致报错的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。要将List对象集合转为map集合,可以通过stream流的形
2023-06-15

如何修改注册表解决IE 8引起的VS2005以及2008向导出错的问题

如何修改注册表解决IE 8引起的VS2005以及2008向导出错的问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。IE正式版引发VS2005和VS2008向导出错的解决方
2023-06-14

编程热搜

目录