Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
docs
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
戚鸿镇
docs
Commits
de10471f
提交
de10471f
authored
2月 05, 2025
作者:
qhz
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
【开发】binlog 数据订阅方案-初稿
上级
4f608f5c
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
108 行增加
和
0 行删除
+108
-0
binlog_cancal_1.png
images/data_sync/binlog_cancal_1.png
+0
-0
mysql_binlog数据订阅方案(初步).md
mysql数据订阅方案/mysql_binlog数据订阅方案(初步).md
+108
-0
没有找到文件。
images/data_sync/binlog_cancal_1.png
0 → 100644
浏览文件 @
de10471f
38.5 KB
mysql数据订阅方案/mysql_binlog数据订阅方案(初步).md
0 → 100644
浏览文件 @
de10471f
# 目的
面对越来越繁杂的业务,重大的修改很容易导致。系统的不稳定,所以需要采用非业务侵入的方案,对数据进行收集或转发
这里采用 cancal 对mysql binlog数据进行订阅
# Cancal 初步介绍
Canal,意为“水道”,形象地比喻其作为数据流动的管道,主要功能是基于MySQL数据库的增量日志解析,实现增量数据的实时订阅和消费
项目起源于阿里巴巴内部对于跨机房数据同步的需求,通过解析MySQL的二进制日志(Binary Log),Canal能够捕获并推送数据库的变更事件,满足了诸如数据库镜像、实时备份、索引实时维护等多种业务场景的需求
Canal巧妙地模拟了MySQL主从复制的机制。具体而言
-
`伪装为MySQL Slave`
:Canal向MySQL Master发送dump请求,假装自己是一个MySQL Slave
-
`获取Binary Log`
: MySQL Master接收到请求后,开始推送Binary Log给Cancal
-
`解析日志事件`
: Canal解析接收到的Binary Log,将数据变更信息转换为易于处理的结构化数据
# 数据订阅方案

通过 Cancal 对 binlog 数据订阅
并通过
[
cancal-php
](
https://gitee.com/lujihong/canal-php
)
客户端获取binlog 具体数据,为了提高数据的吞吐率,可以使用Redis 队列(或者其他队列)具体处理对应的业务
# 配置项
## Cancal
### canal/conf/example/instance.properties
```
properties
# 数据源配置
canal.instance.master.address
=
mysql:3306
canal.instance.dbUsername
=
canal
canal.instance.dbPassword
=
canal
# 过滤规则(同步所有库表)
canal.instance.filter.regex
=
.*
\\
..*
# 存储模式(内存)
canal.instance.memory.store
=
true
```
## binlog 配置
```
[mysqld]
# 打开binlog
log-bin=mysql-bin
# 选择ROW(行)模式
binlog-format=ROW
# mysql实例唯一id,但是切记不能与下文中需要配置的canal的slaveId重复
server_id=1
```
# docker-compose.yml 配置
deepseek 生成(未验证)
```
yaml
version
:
'
3.8'
services
:
# 依赖的 MySQL 数据库
mysql
:
image
:
mysql:5.7
container_name
:
mysql
environment
:
MYSQL_ROOT_PASSWORD
:
root
# Root 用户密码
MYSQL_DATABASE
:
test
# 初始数据库
MYSQL_USER
:
canal
# 创建 Canal 专用用户
MYSQL_PASSWORD
:
canal
ports
:
-
"
3306:3306"
volumes
:
-
./mysql/conf:/etc/mysql/conf.d
# 挂载 MySQL 配置
-
./mysql/data:/var/lib/mysql
# 持久化数据
networks
:
-
canal-network
# Canal 服务
canal
:
image
:
canal/canal-server:v1.1.7
# 官方镜像已包含 Java 环境
container_name
:
canal-server
depends_on
:
-
mysql
ports
:
-
"
11111:11111"
# Canal 默认服务端口
environment
:
# Canal 全局配置
canal.auto.scan
:
"
true"
# 自动扫描实例配置
canal.instance.memory.store
:
"
true"
# MySQL 连接配置
canal.instance.master.address
:
mysql:3306
canal.instance.dbUsername
:
canal
canal.instance.dbPassword
:
canal
canal.instance.filter.regex
:
.*\\..*
volumes
:
-
./canal/conf:/home/admin/canal-server/conf
# 挂载自定义配置
-
./canal/logs:/home/admin/canal-server/logs
# 持久化日志
networks
:
-
canal-network
networks
:
canal-network
:
driver
:
bridge
```
# 参考资料
-
[
Canal:MySQL Binlog解析与增量数据订阅实战指南
](
https://blog.csdn.net/qq_29752857/article/details/138482952
)
-
[
canal-php
](
https://gitee.com/lujihong/canal-php
)
-
[
深入浅出阿里数据同步神器:Canal原理+配置+实战全网最全解析!
](
https://developer.aliyun.com/article/1179561
)
-
[
Canal1.1.5最新版安装部署及详细配置(1)
](
https://blog.csdn.net/lizz861109/article/details/112369812
)
-
[
Mysql配置binlog操作
](
https://blog.csdn.net/lizz861109/article/details/112378004
)
-
[
canal使用指南(一)
](
https://blog.csdn.net/imVainiycos/article/details/122077960
)
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论