基于binlog的canal到redis的同步

步骤1:安装canal

ruby 复制代码
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
tar zvfx canal.deployer-1.1.4.tar.gz

步骤2:配置my.cnf,创建canal用户并重启mysql

ini 复制代码
`[mysqld]`

`log-bin=mysql-bin # 开启Binlog`

`binlog-format=ROW # 设置Binlog格式为ROW`

`server_id=1 # 配置一个ServerID`

创建一个canal账户

sql 复制代码
CREATE USER canal IDENTIFIED BY 'canal123456'; 
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;

重启一下 MySQL,确保所有的配置生效。

sql 复制代码
systemctl start mysqld

重启后检查一下当前的 Binlog 文件和位置

步骤3:配置canal

ini 复制代码
canal.instance.gtidon=false


# position info
canal.instance.master.address=127.0.0.1:3306
canal.instance.master.journal.name=mysql-bin.000001
canal.instance.master.position=777
canal.instance.master.timestamp=
canal.instance.master.gtid=


# username/password
canal.instance.dbUsername=canal
canal.instance.dbPassword=xxxxxxx
canal.instance.connectionCharset = UTF-8
canal.instance.defaultDatabaseName=test
# table regex
canal.instance.filter.regex=.*\\..

步骤4:启动canal

Canal 服务启动后,会开启一个端口(11111)等待客户端连接,客户端连接上 Canal 服务之后,可以从 Canal 服务拉取数据,每拉取一批数据,进行业务处理之后,给 Canal 服务返回处理成功的响应。

如果发生客户端程序宕机或者处理失败等异常情况,Canal 服务没收到处理成功的响应,下次客户端来拉取的还是同一批数据,这样就可以保证顺序并且不会丢数据。

步骤5:本地环境搭建并测试

本地需要安装redis,以及编写同步代码,代码可以参考:github.com/liyue2008/c...

然后启动工程,canal将连接到canal服务端,canal服务端能够将从指定的binlog位置同步数据下来解析。

这里解释下原理:

diff 复制代码
-   Canal 模拟 MySQL 主从复制的交互协议,把自己伪装成一个 MySQL 的从节点,向 MySQL 主节点发送 dump 请求,

MySQL 收到请求后,就会开始推送 Binlog 给 Canal,Canal 解析 Binlog 字节流之后,转换为便于读取的结构化数据,

供下游程序订阅使用.

-   客户端连接上 Canal 服务之后,可以从 Canal 服务拉取数据,每拉取一批数据,正确写入 Redis 之后,给 Canal 服务

返回处理成功的响应。

-   如果发生客户端程序宕机或者处理失败等异常情况,Canal 服务没收到处理成功的响应,下次客户端来拉取的还是同一

批数据,这样就可以保证顺序并且不会丢数据。

更新数据库的一条记录,canal客户端将从服务端拉取到更新后的数据出来解析。

然后在redis查询get canal:

这样就完成了基于binlog的canal到redis的同步!

相关推荐
小江的记录本几秒前
【MyBatis-Plus】MyBatis-Plus的核心特性、条件构造器、分页插件、乐观锁插件
java·前端·spring boot·后端·sql·tomcat·mybatis
驕傲的兎孒8 分钟前
基于 SpringBoot + Vue3 + AI 打造企业级售后服务支持平台 | 实战方案分享
人工智能·spring boot·后端
大傻^12 分钟前
Spring AI Alibaba 可观测性实践:AI应用监控与链路追踪
java·人工智能·后端·spring·springaialibaba
诗人不写诗20 分钟前
spring是如何组织切面的
java·后端·spring
小杨同学4939 分钟前
STM32 进阶封神之路(二十二):DMA 实战全攻略 ——ADC 采集 + 串口收发 + 内存复制(库函数 + 代码落地)
后端·单片机·嵌入式
天下无贼!1 小时前
【Python】2026版——FastAPI 框架快速搭建后端服务
开发语言·前端·后端·python·aigc·fastapi
大傻^1 小时前
Spring AI Alibaba Agent开发:基于ChatClient的智能体构建模式
java·数据库·人工智能·后端·spring·springaialibaba
大傻^1 小时前
Spring AI Alibaba ChatClient实战:流式输出与多轮对话管理
java·人工智能·后端·spring·springai·springaialibaba
SuniaWang2 小时前
《Spring AI + 大模型全栈实战》学习手册系列· 专题二:《Milvus 向量数据库:从零开始搭建 RAG 系统的核心组件》
java·人工智能·分布式·后端·spring·架构·typescript
张小洛2 小时前
Spring 常用类深度剖析(工具篇 02):ReflectionUtils——优雅操作反射的利器
java·后端·spring·工具类·spring常用类