01 引言

Binlog技术大家应该耳熟能详了,遇到实在无法解释数据的变化,就只能请出Binlog终极大招,来查数据的变化。它在项目中是如何使用的呢,以及遇到应用的场景是什么样的?

02 Binlog基础概念

Binlog(Binary Log)MySQL 的二进制日志,记录了对数据库执行的所有更改操作(DDLDML),但不包含 SELECTSHOW 等查询操作。

2.1 主要作用

  • 数据复制:主从复制的基础
  • 数据恢复:基于时间点的数据恢复
  • 数据同步:异构系统间的数据同步
  • 数据分析:数据变更审计和分析

2.2 Binlog 的三种格式

格式特点适用场景
STATEMENT记录 SQL 语句日志量小,但可能存在不确定性
ROW记录每行数据的变更数据一致性好,日志量大
MIXED混合模式根据情况自动选择以上两种

应用框架中解析Binlog多采用的格式是:ROW

03 应用框架

应用的框架主要分为两类:嵌入式和独立部署

3.1 嵌入式

嵌入式的框架需要在项目引入依赖,直接集成在项目使用,具有一定的侵入性。比较早的框架:mysql-binlog-connector-java

mysql-binlog-connector-javaGithub上开源的一款产品,有2.3Kstar846Fork。很多开源框架都是根据其演变而来。

GitHub地址:github.com/shyiko/mysq…

另一款是出自dromara社区的binlog4j,它底层就是用了上面的框架(因为我看到shyiko包的日志了)。它支持 传统项目 与 Spring Boot 项目集成,同时兼容 Spring Boot 2.x3.x 版本,算是比较新的框架了。但是自动更新1.9.1版本之后,已经2年没有更新了,提问的Issues也无人问津。

Gitee地址:gitee.com/dromara/bin…

3.2 独立部署

独立部署的框架有很多,有付费的也有免费的。

  • CloudCanal:社区虽然免费,但是同步任务限制了5个,除非放血使用商业版。当然CloudCanal的功能更加强大,类似工具还有很多,各大厂商都有自己的DTS。这个收到一定的限制,显然不是我们的首选。
  • Canal:阿里的开源产品,是一个优秀的同步框架,也需要搭建服务,支持将的数据Sink到其他中间件里面。
  • Maxwell:是国外的一个同步软件,类似的阿里的Cannal,但是没有Cannal的功能强大。
  • FlinkCDC:是Flink实时计算框架衍生的一款工具,虽然开源,但是使用成本比较高,需要有一定的Flink基础。

04 使用场景

数据库同步我们暂且不管,无论是异构数据库,还是主从同步。各个厂商都有独属于自己的DTS同步工具,我们就聊聊项目中可以用到的场景。

4.1 双写一致性

缓存与数据库的一致性问题可以通过Binlog解决。面试八股文中都会问到双写一致性的问题。

无论是先更新数据库还是先更新缓存,都是从代码层面主动发起额修改。而Binlog为我们提供了另一种思路。

我们业务代码只需要操作数据库即可,缓存就可以通过数据库Binlog来更新。但是对于少量的数据来说,这种方式有显的有点复杂,没有直接删除缓存在加载数据来的实在。

4.2 解耦

正常的业务中,我们对于数据的更新,都是通过同步、多线程、MQ等方式进行。但是业务的入口比较多,我们可以使用Binlog的方式主要节点的变更,然后处理对应的逻辑。

4.3 业务坚控

随着业务复杂度的增大,很多时候我们需要对于重要的节点数据坚控,然后推送消息。面临的问题如同4.2一致,入口无法完全统计。通过Binlog坚控需要坚控的节点,然后根据业务推送不同的消息。

05 小结

使用Binlog的方式比较多,嵌入式的做法可以应对比较简单的场景,但是对于复杂的场景,代码就会冗余。个人比较倾向于独立部署的方式,因为独立,所以可以应对更多的场景,又完全解耦业务代码。

本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:alixiixcom@163.com