背景
作为一名CURD的程序员,少不了跟MySQL打交道,在同步数据的时候,MySQL的Binlog显得重中之重,所以处理Binlog的工具尤为重要。
其中阿里巴巴开源的canal 更是耳闻目睹,但是今天小编给大家介绍另外一款MySQL数据库实时增量同步工具:go-mysql-transfer
介绍
go-mysql-transfer是一款MySQL数据库实时增量同步工具。功能也比较简单,就是能够监听MySQL二进制日志(Binlog)的变动,将变更内容形成指定格式的消息,实时发送到接收端。从而在数据库和接收端之间形成一个高性能、低延迟的增量数据同步更新管道。
特性
-
简单一键部署,并且不依赖其它组件,
-
内置丰富的数据解析、消息生成规则、模板语法
-
天然集成多种接收端,无需编写客户端,开箱即用
-
支持Lua脚本扩展,可处理复杂逻辑
-
集成Web Admin监控页面、支持监控告警、高可用集群部署
-
支持全量数据初始化、数据同步失败重试
快速使用
官方提供了二进制安装包、源码编译下载方式,我们选用二进制安装包下载
下载地址:https://github.com/wj596/go-mysql-transfer/releases
前置条件
我们先准备一个MySQL,并且修改对应配置
#Linux在my.cnf文件
#Windows在my.ini文件
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=2 # 配置 MySQL replaction 需要定义,不要和 go-mysql-transfer 的 slave_id 重复
运行
-
修改app.yml
-
Windows直接运行 go-mysql-transfer.exe
-
Linux执行 nohup go-mysql-transfer &
监控
go-mysql-transfer支持两种监控模式,Prometheus和内置的Web Admin,我们开启相关配置
# web admin相关配置
enable_web_admin: true #是否启用web admin,默认false
web_admin_port: 8060 #web监控端口,默认8060
直接访问127.0.0.1:8060 可以看到监控界面
img
与同类工具比较
特色 | Canal | mysql_stream | go-mysql-transfer |
---|---|---|---|
开发语言 | Java | Python | Golang |
高可用 | 支持 | 支持 | 支持 |
接收端 | 编码定制 | Kafka等(MQ) | Redis、MongoDB、Elasticsearch、RabbitMQ、Kafka、RocketMQ、HTTP API 后续支持更多 |
全量数据初始化 | 不支持 | 支持 | 支持 |
数据格式 | 编码定制 | Json(固定格式) | Json(规则配置) 模板语法 Lua脚本 |
总结
总的来说go-mysql-transfer作为一款MySQL数据库实时增量同步工具,功能非常齐全,特别是天然集成多种接收端,给开发者省下了很多开发代码。
大家使用的时候多测师,看是否满足自己的需求。
最后在贴上地址:
官方文档:https://www.kancloud.cn/wj596/go-mysql-transfer/2064425
Github:https://github.com/wj596/go-mysql-transfer