背景

作为一名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 重复

运行

  1. 修改app.yml

  2. Windows直接运行 go-mysql-transfer.exe

  3. 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

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐