数据实时同步工具,使用 vert.x 异步框架,效率高
将自己伪装成 mysql slave,获取mysql推送的binlog信息,通过字段映射,处理成为新的sql并向目标库执行,从而完成数据实时同步。
mysql开启binlog记录, 格式为ROW
- git clone https://github.com/hjx601496320/plumber.git
- cd plumber/plumber/
- mvn package
- cd target/
- tar -zxvf plumber.tar.gz
- cd plumber/ 并修改config/config.json
- 执行 sh bin/start.sh 启动
启动脚本目前只支持linux系统, win脚本不会写 /(ㄒoㄒ)/~~
- log-name:binlog 名称(默认为最新文件)
- log-position:binlog 开始位置(默认为后位置)
- data-source:数据来源
- executer:数据持久化执行工具配置, 目前只支持mysql, 后续添加更多
- MysqlEventExecuter: mysql的持久化工具
- data-target:数据目标配置
- MysqlEventExecuter: mysql的持久化工具
- table-sync-job:事件处理, 数组 (不配置的话整个库同步,认为表结构完全一致)
- primary-key:更新,删除条件字段. 默认数据库id.
- source:数据来源库的表
- target:数据目标库的表
- mapping:字段映射. key:来源表字段名称, value:目标表字段名称. (必须包含primary-key, 例如primary-key为"tableId", 那么mapping 中必须包含"tableId")
{
"log-name":null,
"log-position":null,
"data-source":{
"host":"127.0.0.1",
"database":"dbname",
"port":3306,
"username":"root",
"password":"00000"
},
"executer":{
"MysqlEventExecuter":{
"data-target":{
"host":"127.0.0.1",
"database":"dbname",
"port":3306,
"username":"root",
"password":"00000"
}
}
},
"table-sync-job":[
{
"primary-key":"id",
"source":"test_1",
"target":"test_2"
}
]
}
{
"log-name":null,
"log-position":null,
"data-source":{
"host":"127.0.0.1",
"database":"dbname",
"port":3306,
"username":"root",
"password":"00000"
},
"executer":{
"MysqlEventExecuter":{
"data-target":{
"host":"127.0.0.1",
"database":"dbname",
"port":3306,
"username":"root",
"password":"00000"
}
}
},
"table-sync-job":[
{
"mapping":{
"id":"id_2",
"name":"name_2",
"age":"age_2"
},
"primary-key":"id",
"source":"test_1",
"target":"test_2"
}
]
}
{
"log-name":null,
"log-position":null,
"data-source":{
"host":"127.0.0.1",
"database":"dbname",
"port":3306,
"username":"root",
"password":"00000"
},
"executer":{
"MysqlEventExecuter":{
"data-target":{
"host":"127.0.0.1",
"database":"dbname",
"port":3306,
"username":"root",
"password":"00000"
}
}
}
}