DBSyncer是一款开源的数据同步中间件,提供Mysql、Oracle、SqlServer、Elasticsearch(ES)、SQL(Mysql/Oracle/SqlServer)等同步场景。支持上传插件自定义同步转换业务,提供监控全量和增量数据统计图、应用性能预警等。
特点
- 组合驱动,自定义库同步到库组合,关系型数据库与非关系型之间组合,任意搭配表同步映射关系
- 实时监控,驱动全量或增量实时同步运行状态、结果、同步日志和系统日志
- 开发插件,自定义转化同步逻辑
连接器 | 数据源 | 目标源 | 支持版本(包含以下) |
Mysql | √ | √ | 5.7.19以上 |
Oracle | √ | √ | 10g以上 |
SqlServer | √ | √ | 2008以上 |
ES | √ | √ | 6.X以上 |
SQL | √ | ||
最近计划 | kafka(设计中)、Redis |
- 安装JDK 1.8(省略详细)
- 下载安装包DBSyncer-1.0.0-Beta.zip(也可手动编译)
- 解压安装包,Window执行bin/startup.bat,Linux执行bin/startup.sh
- 打开浏览器访问:http://127.0.0.1:18686
- 账号和密码:admin/admin
- Dump Binlog二进制日志。Master同步Slave, 创建IO线程读取数据,写入relaylog,基于消息订阅捕获增量数据。
- 配置
修改my.ini文件
#服务唯一ID
server_id=1
log-bin=mysql_bin
binlog-format=ROW
max_binlog_cache_size = 256M
max_binlog_size = 512M
expire_logs_days = 7
#监听同步的库, 多个库使用英文逗号“,”拼接
replicate-do-db=test
- CDN注册订阅。监听增删改事件,得到rowid,根据rowid执行SQL查询,得到变化数据。
- 配置
授予账号监听权限, 同时要求目标源表必须定义一个长度为18的varchar字段,通过接收rowid值实现增删改操作。
grant change notification to 你的账号
- SQL Server 2008提供了内建的方法变更数据捕获(Change Data Capture 即CDC)以实现异步跟踪用户表的数据修改。
- 配置
要求2008版本以上, 启动代理服务(Agent服务), 连接账号具有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员身份。对于所有其他用户,具有源表SELECT 权限;如果已定义捕获实例的访问控制角色,则还要求具有该数据库角色的成员身份。
- 定时获取增量数据。
- 配置
账号具有访问权限。
建议Mysql和SqlServer都使用日志
假设源表数据格式
- 创建一个连接器。选择数据源类型,比如:Mysql,填写配置,保存
- 添加驱动。配置数据源和目标源(数据源:数据的发送端,目标源:数据接收端),保存
- 模式支持全量同步(默认:全量复制)和增量同步(监听变化的数据)
- 基本配置里面,添加映射关系。添加数据源表同步到目标源表关系
- 单击映射关系,进入表字段详细页面,默认匹配相识字段,识别主键(主键用于增量同步,更新和删除使用),保存
- 高级配置省略
- 点击驱动右上角齿轮按钮,启动或删除
- 驱动面板下方显示同步的详细,如果有异常日志,点击日志可跳转至监控菜单查看详细
- Mysql无法连接。默认使用的驱动版本为5.1.40,如果为mysql8需要手动替换驱动 mysql-connector-java-8.0.21.jar
- JDK - 1.8.0_40(推荐版本以上)
- Maven - 3.3.9(推荐版本以上)
先确保环境已安装JDK和Maven
$ git clone https://gitee.com/ghi/dbsyncer.git
$ cd dbsyncer
$ chmod u+x build.sh
$ ./build.sh