gravity 使用操做。

gravity 使用操做。
最近我司有一個比較奇葩的需求,咱們的環境是主從,由於數據量較大會按期的刪除數據,
最近不行了,要求新建出來一個庫 同步正事環境的數據,可是要剔除 delete ,drop,truncat 等這些刪除數據的語句。
所以 準備使用gravity 來進行數據操做。看看可否知足這些需求。html

這個環境實現的是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 腳本安裝mysql

在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/ && makelinux

可能會出現如下錯誤:
錯誤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/refsgit

fatal: HTTP request failedgithub

這是由於系統自帶的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 nssgolang

分別在mysql:192.168.17.21(主) mysql:192.168.17.23(輔)執行一下命令sql

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;vim

建立以下配置文件 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 不支持 很好用

相關文章
相關標籤/搜索