
mysql数据实时同步使用canal框架可以实现,但是canal需要额外部署,此次使用的是一种更加轻量级的方式。
一款非常不错开源的组件mysql-binlog-connector-java。通过名称就能知道他是通过连接MySQL binlog日志来实现数据监听的。该组件不仅仅是能够实时监听binlog的变化,而且你还可以直接去读取binlog日志文件解析其内容。
该组件具备以下特性:
自动解析二进制日志文件名/位置 | GTID 解析
断开连接可恢复
插件化的故障转移策略
支持 binlog\_checksum=CRC32(适用于 MySQL 5.6.2+ 用户)
通过 TLS 进行安全通信
友好的Java管理扩展(JMX)
实时统计
在 Maven Central 上可用
无第三方依赖,跨不同版本的 MySQL 发行版的测试套件
接下来,我将通过如下几方面介绍该组件在项目中的使用:
编程解析binlog日志
* 实时监听binlog日志
环境准备
我的mysql版本:5.7.34
1、引入依赖包
2、mysql开启binlog日志
3、查看到log_bin的值为OFF,说明未开启binlog,需要先开启mysql的binlog
编辑mysql的配置文件,一般为my.cnf 或 my.ini。增加如下信息
之后重启mysql服务
问题:在使用docker容器启动的mysql遇到了权限问题
所以在docker容器启动的mysql,先不要在my.cnf增加上面的内容,先正常启动mysql, 然后进入容器内部进行授权操作
重启mysql容器
4、查看是否已开启binlog日志
编程读取binlog日志
上面程序输出结果:
实时监听Binlog日志
以上监听程序,我们仅对部分事件进行了监听处理。当数据发生变化后,输出如下:
更序列使用了BitSet表示,所以如果你要与具体的列想对应,你还应该执行如下的语句来确定具体的列名:
| id | int | NO | PRI | NULL | auto_increment | |
|---|---|---|---|---|---|---|
| age | int | YES | NULL |
这是增加的测试数据
