gravity 使用操作。
最近我司有一个比较奇葩的需求,我们的环境是主从,因为数据量较大会定期的删除数据,
最近不行了,要求新建出来一个库 同步正事环境的数据,但是要剔除 delete ,drop,truncat 等这些删除数据的语句。
因此 准备使用gravity 来进行数据操作。看看能否满足这些需求。

这个环境实现的是mysql ---------》 mysql的数据同步(剔除drop,truncate,delete语句);
mysql:192.168.17.21(主)
mysql:192.168.17.23(辅)
gravity:192.168.17.20
mysql 如果不会安装的话 可以使用 https://www.cnblogs.com/noel/p/10314125.html 脚本安装

在192.168.17.20 配置go语言环境:
https://golang.org/dl/ 下载linux 安装包
上传到服务器 /usr/local/src/ 目录下:
tar -xvzf go1.11.5.linux-amd64.tar.gz -C /usr/local/
export PATH=$PATH:/usr/local/go/bin
或者
vim /etc/profile
查看 gopath
go env
source /etc/profile
编译 (TODO: 开源后直接从 github 下载 binary)
mkdir -p $GOPATH/src/github.com/moiot/
cd $GOPATH/src/github.com/moiot/
git clone https://github.com/moiot/gravity.git
cd gravity/ && make

可能会出现以下错误:
错误1:
[root@localhost moiot]# git clone https://github.com/moiot/gravity.git
Initialized empty Git repository in /usr/local/go/bin/src/github.com/moiot/gravity/.git/
error: while accessing https://github.com/moiot/gravity.git/info/refs

fatal: HTTP request failed

这是因为系统自带的git的版本太低了 需要升级git:
升级git: 下载相应的安装包
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
yum install gcc perl-ExtUtils-MakeMaker
移除系统自带的git
yum remove git
安装新版git
cd /usr/local/src/
wget https://www.kernel.org/pub/software/scm/git/git-2.9.5.tar.xz
tar -xvz git-2.9.5.tar.xz
cd git-2.9.5
./configure --prefix=/usr/local/git
make && make install
echo "export PATH=$PATH:/usr/local/git/bin" >>/etc/profile
source /etc/profile
错误2:
[root@localhost moiot]# git clone https://github.com/moiot/gravity.git
Cloning into 'gravity'...
fatal: unable to access 'https://github.com/moiot/gravity.git/': SSL connect error
[root@localhost moiot]#
解决办法 yum update nss

分别在mysql:192.168.17.21(主) mysql:192.168.17.23(辅)执行一下命令

CREATE USER _gravity IDENTIFIED BY '_gravity';
GRANT SELECT, RELOAD, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT, CREATE, INSERT, UPDATE, DELETE ON *.* TO '_gravity'@'%';
GRANT ALL PRIVILEGES ON _gravity.* TO '_gravity'@'%';
flush privileges;

创建如下配置文件 mysql-mysql.toml
cat > mysql-mysql.toml << "EOF"
name = "mysql-mysql"

#
# Input 插件的定义,此处定义使用 mysql
#
[input]
type = "mysql"
mode = "replication" ##全量+增量(replication),增量(stream),全量(batch)

[input.config]
#是否忽略双向同步产生的内部数据,默认是false
ignore-bidirectional-data = false
# 总体扫描的并发线程数
# - 默认为 10,表示最多允许 10 个表同时扫描
# - 可选
nr-scanner = 10
# 单次扫描所去的行数
# - 默认为 10000,表示一次拉取 10000 行
# - 可选
table-scan-batch = 10000
# 全局限制,每秒所允许的 batch 数
# - 默认为 1
# - 可选
#
batch-per-second-limit = 1
# 全局限制,没有找到单列主键、唯一索引时,最多多少行的表可用全表扫描方式读取,否则报错退出。
# - 默认为 100,000
# - 可选
#
max-full-dump-count = 10000

[input.config.source]
host = "192.168.17.21"
username = "_gravity"
password = "_gravity"
port = 3306

# 需要扫描的表
# - 必填 多个schema的话 写多个configs
[[input.config.table-configs]]
schema = "test_gravity"
table = "*"
#
# Output 插件的定义,此处使用 mysql
#
[output]
type = "mysql"
#
[output.config]
enable-ddl = true #当前支持 create & alter table 语句。库表名会根据路由信息调整。
[output.config.target]
host = "192.168.17.23"
username = "_gravity"
password = "_gravity"
port = 3306

# 路由规则的定义
[[output.config.routes]]
match-schema = "test_gravity"
match-table = "*"
target_schema = "test_gravity"
target-table = "*"

[output.config.execution-engine]
# 开启双向同步标识的写入
use-bidirection = false

[[filters]]
type = "reject"

[filters.config]
match-schema = "test_gravity"
match-dml-op = "delete"
EOF

然后启动 :
bin/gravity --config mysql-mysql.toml

########遇到的一个坑:
binlog_row_image 必须设置成FULL

create database 操作需要两边都做
delete 可以剔除
drop,truncate 不支持 很好用

gravity 使用操作。的更多相关文章

  1. CentOS 6 安装Oracle11g

    原创作品.从 "深蓝blog" 博客,欢迎转载,请务必注明转载如下源.否则追究其版权责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/ar ...

  2. 仿QQ空间根据位置弹出PopupWindow显示更多操作效果

    我们打开QQ空间的时候有个箭头按钮点击之后弹出PopupWindow会根据位置的变化显示在箭头的上方还是下方,比普通的PopupWindow弹在屏幕中间显示好看的多. 先看QQ空间效果图:       ...

  3. 3D Touch介绍:电子秤App与快捷操作

    随着iPhone6s与6s plus的到来,苹果给我们展现了一种全新的交互方式:重按手势.你可能知道,这个特性已经在Apple Watch和MacBook上推出了,不过那时叫Force Touch,就 ...

  4. Android在listview添加checkbox实现单选多选操作问题(转)

    转自:http://yangshen998.iteye.com/blog/1310183 在Android某些开发需求当中,有时候需要在listveiw中加入checkbox实现单选,多选操作.表面上 ...

  5. android:layout_gravity 和 android:gravity 的区别

    gravity 这个英文单词是重心的意思,在这里就表示停靠位置的意思. android:layout_gravity 和 android:gravity 的区别 从名字上可以看到,android:gr ...

  6. Android – 学习操作NFC – 2

    在<Android – 学习操作NFC – 1>说明了Android在处理NFC tag的机制.tag dispatch system的运作流程,以及三种ACTION_NDEF_DISCO ...

  7. android管理联系人操作

    ContentProvider扩展之管理系统联系人 我们都知道ContentProvider是用来共享数据的,然而android本身就提供了大量的ContentProvider,例如联系人信息,系统的 ...

  8. 柯南君 :Oracle 分区技术 之 怎样支撑大数据操作?

    前段时间.看了罗女士( 资深技术顾问 - Oracle 中国 顾问咨询部)关于<大批量数据处理技术的演讲>视频.感觉受益良多,结合多年的知识积累,柯南君给大家分享一下: 交流内容: 一.O ...

  9. android使用Intent操作拨打号码发送短信

    Activity程序Activity.java package com.example.intentcaseproject; import android.net.Uri; import androi ...

随机推荐

  1. screen命令常用参数使用

    screen简要说明 screen 会话命令可以保持本地和服务器断开后,程序继续在服务器上运行,并且运行结束后,输出最后的结果.功能结果相当于 nohup command &,但是功能远比no ...

  2. Django基础(3)----模型层-单表操作,多表创建

    昨日内容回顾: 1. {% include '' %} 2. extend base.html: <html> ..... ..... ..... {% block content%} { ...

  3. vbox和宿主机共享文件夹

    首先,查看vbox安装的ubuntu是否支持vboxsf模块 sudo modprobe vboxsf dmesg | grep vboxsf 如果没有安装,需要安装vboxsf模块:(如果安装了请跳 ...

  4. Python3.5 控制台日志输出,区分标准输出与错误输出

    import logging import sys class ConsoleHandler(logging.Handler): terminator = '\n' def __init__(self ...

  5. SQL海量数据读写性能优化

    这是给某数据中心做的一个项目,项目难度之大令人发指,这个项目真正的让我感觉到了,商场如战场,而我只是其中的一个小兵,太多的战术,太多的高层之间的较量,太多的内幕了.具体这个项目的情况,我有空再写相关的 ...

  6. 安装xenserver过程中出现的问题

    运行环境:win10系统,神舟战神z7m-KP7GT型号笔记本,VMWare虚拟机,XenServer7.2.0,XenCenter7.2.0 5月22日下午安装上xenserver虚拟机,发现虚拟机 ...

  7. @b.windows.last.use

    @b.windows.last.use @b.windows.first.use be_true  一般用在step文件中

  8. File 元素 都有files属性

    File 元素 都有files属性 必须有 name 才能传到后台 Html data-* 存储string 值 Jquery data() 可以存储对象 ,但是执行后页面看不到,可以取到     P ...

  9. 使用pycharm 运行python的django项目时报错“Quit the server with CTRL-BREAK.”

    Quit the server with CTRL-BREAK.Error: [Errno 10013] 1昨晚测试时还好好的,怎么突然出现这个错误,于是GOOLE,找到个帖子说可能是端口占用了,用工 ...

  10. Android 从零开始搭建一个主流项目框架—RxJava2.0+Retrofit2.0+OkHttp

    我这里的网络请求是用的装饰者模式去写的,什么是装饰者模式呢?在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.我的理解就是一个接口, ...