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. Eugeny and Array(水题,注意题目描述即可)

    Eugeny has array a = a1, a2, ..., an, consisting of n integers. Each integer ai equals to -1, or to ...

  2. 01.Spring Ioc 容器

    基本概念 Spring 的 Ioc 容器,通常也称应用上下文.它包含了两个概念 Ioc 和 容器: 容器:顾名思义就是用来装东西的,在 Spring 中容器里盛放的就是各种各样的 Bean.既然装了东 ...

  3. 合理设置apache httpd的最大连接数--linux

    手头有一个网站在线人数增多,访问时很慢.初步认为是服务器资源不足了,但经反复测试,一旦连接上,不断点击同一个页面上不同的链接,都能迅速打开,这种现象就是说明apache最大连接数已经满了,新的访客只能 ...

  4. selenium常用方法,简版介绍

    WebElement 接口共计16个------------接口 代表一个HTML元素.通常,所有与页面交互有关的有趣操作都将通过此界面执行. void clear() void click() We ...

  5. ORACLE比较两个数据库的表结构

    create table ESPACE_TABLE( TABLE_NAME VARCHAR2(100) not null) create table ESPACE_COLUMN( TABLE_NAME ...

  6. CentOS6.x升级MySQL 5.1到5.6

    有一些虚拟机.云主机提供商仍然使用的是老版本的安装套件.预装的应用软件版本很低.有些IDC使用的云服务器,其中MySQL预装版本为老版本5.1.x.而较新的MySQL 5.6版本在性能.功能.安全性等 ...

  7. vue-elem-stylus 的mixin用法

    .tab border-1px{red} minxin border-1px(&color) position:relative &::after display:block posi ...

  8. css钻石旋转实现

    css钻石旋转实现: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...

  9. 有关 C# 命名参数和可选参数

    有关 C# 命名参数和可选参数 #1.命名参数: 所谓“命名参数 ( Named Arguments )”,是指方法中定义了一些“有名字”的参数. 给方法参数命名之后,在调用方法时就可以直接根据参数名 ...

  10. ArcGIS中Features与JSON的互相转化

    实际操作过程非常简单,这里就简单记录下转换工具的位置: