简介
go-mysql-transfer是使用Go语言实现的MySQL数据库实时增量同步工具。能够实时监听MySQL二进制日志(binlog)的变动,将变更内容形成指定格式的消息,发送到接收端。在数据库和接收端之间形成一个高性能、低延迟的增量数据(Binlog)同步管道。
特性
1、不依赖其它组件,一键部署
2、集成多种接收端,如:Redis、MongoDB、Elasticsearch、RabbitMQ、Kafka、RocketMQ,不需要再编写客户端,开箱即用
3、内置丰富的数据解析、消息生成规则;支持Lua脚本扩展,以处理更复杂的数据逻辑
4、集成Prometheus客户端,支持监控告警
5、支持高可用集群部署
6、数据同步失败重试
7、支持全量数据初始化同步
原理
1、将自己伪装为MySQL的Slave监听binlog,获取binlog的变更数据
2、根据规则或者lua脚本解析数据,生成指定格式的消息
3、将生成的消息批量发送给接收端
与同类工具比较
特色
Canal
mysql_stream
go-mysql-transfer
开发语言
Java
Python
Golang
HA
支持
支持
支持
接收端
编码定制
Kafka等
Redis、MongoDB、Elasticsearch、RabbitMQ、Kafka、RocketMQ
后续支持更多
数据初始化
不支持
支持
支持
数据格式
编码定制
json(固定)
规则 (固定)
lua脚本 (定制)
安装包
二进制安装包
直接下载安装包: 点击下载
源码编译
1、依赖Golang 1.14 及以上版本
2、设置' GO111MODULE=on '
3、拉取源码 ‘ go get -d github.com/wj596/go-mysql-transfer’
3、进入目录,执行 ‘ go build ’ 编译
全量数据初始化
go-mysql-transfer -stock
运行
开启MySQL的binlog
#Linux在my.cnf文件
#Windows在my.ini文件
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 go-mysql-transfer 的 slave_id 重复
命令行运行
1、修改app.yml
2、Windows直接运行 go-mysql-transfer.exe
3、Linux执行 nohup go-mysql-transfer &
使用说明
感谢
更新日志
v1.0.0 bate
9.17 初始化提交bate版本
v1.0.1 release
9.22 release
v1.0.2 release
添加dbOps(数据库操作)、httpOps(http操作)两个Lua模块
修复enum类型字段出现的乱码问题
redis接收端增加Sorted Set数据类型支持
修复了近来反馈的bug