go-mysql-transfer是一款MySQL數據庫實時增量同步工具。
能夠監聽MySQL二進制日志(Binlog)的變動,將變更內容形成指定格式的消息,實時發送到接收端。從而在數據庫和接收端之間形成一個高性能、低延遲的增量數據同步更新管道。
# 特性
1、簡單,不依賴其它組件,一鍵部署
2、集成多種接收端,如:Redis、MongoDB、Elasticsearch、RocketMQ、Kafka、RabbitMQ、HTTP API等,無需編寫客戶端,開箱即用
3、內置豐富的數據解析、消息生成規則,支持模板語法
4、支持Lua腳本擴展,可處理復雜邏輯,如:數據的轉換、清洗、打寬
5、集成Prometheus客戶端,支持監控、告警
6、集成Web Admin監控頁面
7、支持高可用集群部署
8、數據同步失敗重試
9、支持全量數據初始化
# 與同類工具比較
<table>
<thead>
<tr>
<th width="20%">特色</th>
<th width="20%">Canal</th>
<th width="20%">mysql_stream</th>
<th width="40%">go-mysql-transfer</th>
</tr>
</thead>
<tbody>
<tr>
<td>開發語言</td>
<td>Java</td>
<td>Python</td>
<td>Golang</td>
</tr>
<tr>
<td>高可用</td>
<td>支持</td>
<td>支持</td>
<td>支持</td>
</tr>
<tr>
<td>接收端</td>
<td>編碼定制</td>
<td>Kafka等(MQ)</td>
<td>Redis、MongoDB、Elasticsearch、RabbitMQ、Kafka、RocketMQ、HTTP API <br>后續支持更多</td>
</tr>
<tr>
<td>全量數據初始化</td>
<td>不支持</td>
<td>支持</td>
<td>支持</td>
</tr>
<tr>
<td>數據格式</td>
<td>編碼定制</td>
<td>Json(固定格式)</td>
<td>Json(規則配置)<br>模板語法<br>Lua腳本</td>
</tr>
</tbody>
</table>
# 實現原理
1、go-mysql-transfer將自己偽裝成MySQL的Slave,
2、向Master發送dump協議獲取binlog,解析binlog并生成消息
3、將生成的消息實時、批量發送給接收端
如下圖所示:

# 開源
gitee (速度更快) :[go-mysql-transfer](https://gitee.com/wj596/go-mysql-transfer)
github:[go-mysql-transfer](https://github.com/wj596/go-mysql-transfer?_blank)
如果此工具對你有幫助,請在Star支持下;
- 簡介
- 部署運行
- 高可用集群
- 同步數據到Redis
- Redis配置
- 基于規則同步
- 基于Lua腳本同步
- 同步數據到MongoDB
- MongoDB配置
- 基于規則同步
- 基于Lua腳本同步
- 同步數據到RocketMQ
- RocketMQ配置
- 基于規則同步
- 基于Lua腳本同步
- 同步數據到Kafka
- Kafka配置
- 基于規則同步
- 基于Lua腳本同步
- 同步數據到RabbitMQ
- RabbitMQ配置
- 基于規則同步
- 基于Lua腳本同步
- 同步數據到Elasticsearch
- Elasticsearch配置
- 基于規則同步
- 基于Lua腳本同步
- 全量數據導入
- Lua腳本
- 基礎模塊
- Json模塊
- HttpClient模塊
- DBClient模塊
- 監控
- 性能測試
- 常見問題
- 更新記錄開發計劃