gravity是由膜拜公司自主研发的不同数据库间数据同步工具。
官方介绍:https://github.com/moiot/gravity/blob/master/README-cn.md
Gravity 是一款数据复制组件,提供全量、增量数据同步,以及向消息队列发布数据更新。
DRC 的设计目标是:
- 支持多种数据源和目标的,可灵活定制的数据复制组件
- 支持基于 Kubernetes 的 PaaS 平台,简化运维任务
使用场景
- 大数据总线:发送 MySQL Binlog,Mongo Oplog 的数据变更到 kafka 供下游消费
- 单向数据同步:MySQL --> MySQL 的全量、增量同步
- 双向数据同步:MySQL <--> MySQL 的双向增量同步,同步过程中可以防止循环复制
- 分库分表到合库的同步:MySQL 分库分表 --> 合库的同步,可以指定源表和目标表的对应关系
- 在线数据变换:同步过程中,可支持对进行数据变换
一、安装配置golang
golang 针对中国用户有专门的网站:
https://golang.google.cn/dl/
下载文件:
# wget https://dl.google.com/go/go1.12.linux-amd64.tar.gz
解压文件:
# tar -xzvf go1.12.linux-amd64.tar.gz -C /usr/local/
设置环境变量:
# vim /etc/profile
export PATH=$PATH:/usr/local/go/bin
# source /etc/profile
版本验证:
# go version
go version go1.12 linux/amd64
二、安装配置gravity
1.前提条件:安装部署好golang的环境变量:
2.下载gravity的代码:
下载地址:https://github.com/moiot/gravity/releases
选择需要的版本
# wget https://github.com/moiot/gravity/archive/v0.9.61.tar.gz
注释:
由于还是老的模式组织目录结构,需要把项目放在 ${GOPATH}/src/github.com/moiot/
3.由于目前的版本不支持go module功能需要解压到 指定的目录 go/src目录:
# mkdir -p /usr/local/go/src/github.com/moiot/
# tar -xzvf v0.9.25.tar.gz -C /usr/local/go/src/github.com/moiot/
# mv gravity-0.9.25/ gravity
或者直接clone 源代码:
# git clone https://github.com/moiot/gravity.git
#export GOPROXY=https://goproxy.io
# make
#export GOPROXY=
##查看帮助信息:
# ./bin/gravity --help -L warn
Usage of gravity:
-L string
log level: debug, info, warn, error, fatal (default 'info') (default "info")
-V print version and exit
-config string
path to config file
-http-addr string
http-addr (default ":8080")
-log-file string
log file path
-log-format string
log format (default "json")
##版本查询:
# ./bin/gravity -V
Release Version (gravity): 0.0.1+git.
Git Commit Hash:
Git Branch:
UTC Build Time: 2019-07-26 02:58:06
三、问题解决
#执行make命令时,由于一些依赖包需要翻墙才能下载到,所以go在这里自动下载相应的包或依赖包时,会出现timeout问题,无法下载或加载依赖包。。最终导致make失败
go: golang.org/x/net@v0.0.0-20190311183353-d8887717615a: unrecognized import path "golang.org/x/net" (https fetch: Get https://golang.org/x/net?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
go: google.golang.org/grpc@v1.19.0: unrecognized import path "google.golang.org/grpc" (https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
go: golang.org/x/sys@v0.0.0-20180905080454-ebe1bf3edb33: unrecognized import path "golang.org/x/sys" (https fetch: Get https://golang.org/x/sys?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
go: finding github.com/pingcap/parser v0.0.0-20190118120648-5958b6fcdb2d
go: golang.org/x/crypto@v0.0.0-20180904163835-0709b304e793: unrecognized import path "golang.org/x/crypto" (https fetch: Get https://golang.org/x/crypto?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
解决方法:
设置以下环境变量:
export GOPROXY=https://goproxy.io
然后在执行make命令。
原因:
设置了GOPROXY环境变量,下载源代码时将会通过这个环境变量设置的代理地址,而不再是以前的直接从代码库下载。 https://goproxy.io是官方提供公用的代理服务。
通过设置该环境变量:export GOPROXY=https://goproxy.io 后即可正常下载墙外的源码包了:
也可以通过置空这个环境变量来关闭,export GOPROXY=
需要Go version >= 1.11。
感谢:https://www.cnblogs.com/shockerli/p/go-get-golang-org-x-solution.html
利用gravity实验MySQL->MySQL和MySQL->TiDB数据同步:https://blog.csdn.net/LiuHuan_study/article/details/97394878
感谢:
https://blog.csdn.net/vkingnew/article/details/87932903
https://blog.csdn.net/vkingnew/article/details/88118688