OGG 从 MYSQL5.7同步到BigData(Kafka)

1 说明

1.1 软件版本

Mysql:5.7.26 <u>下载地址</u>

Mysql Ogg:12.2.0.2 <u>下载地址</u>

BigData Ogg:12.3.2.1.1 <u>下载地址</u>

2 安装

2.1 Mysql

(1) 解压并重命名

tar -zxvf mysql-5.7.26-1.el6.x86_64.rpm-bundle.tar.gz

mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql5.7

(2) Mysql配置文件(/etc/my.cnf)

[mysqld]

datadir=/usr/local/mysql5.7/data

socket=/var/lib/mysql/mysql.sock

user=mysql

symbolic-links=0

#######数据库超时时间

connect_timeout=388000

#######wait_timeout=388000

interactive_timeout=388000

##########默认存储引擎

default-storage-engine=INNODB

innodb_buffer_pool_size=1073741824

########ogg配置

log-bin=mysql-bin #添加这一行就ok

binlog-format=ROW #选择row模式

server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复

[mysqld_safe]

log-error=/var/log/mysqld5.7.log

pid-file=/var/run/mysqld/mysqld5.7.pid

[client]

default-character-set=utf8

(3) Mysql.server(/usr/local/mysql5.7/support-files/mysql.server

basedir=/usr/local/mysql5.7

datadir=/usr/local/mysql5.7/data

(4) 初始化

cd /usr/local/mysql5.7/bin

./mysqld --initialize -> 这一步会输出root初始密码,请复制下来

(5) 启动文件配置

cp /usr/local/mysql5.7/support-files/mysql.server /etc/init.d/mysql5.7

(6) 启动数据库

services mysqld5.7 start

(7) 可能出现sock异常

解决

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

(8) Mysql的path

先将旧版本的备份

cd /usr/bin

mkdir mysql_bak

mv mysql* mysql_bak;

建立5.7版本的PATH

vim /etc/profile

export MYSQL_HOME=/usr/local/mysql5.7

export PATH=PATH:MYSQL_HOME/bin

(9) Mysql用root登录

mysql -uroot

输入之前复制的密码

alter user root identified by ‘root’; -> 修改root密码

(10) 创建测试库

Mysql -uroot -proot <<!

Create user gg1 identified by gg1;

Create database gg1db default character set =utf8;

Grant all privileges on gg1db.* to gg1@localhost identified by ‘gg1’;

Flush privileges;

!

2.2 源端

(1) 建立ggs用户,并拷贝ggs包到ggs用户下

user add ggs

Passwd ggs -> ggs

chown -R ggs:ggs /home/ggs

(2) 解压到ogg目录下

su - ggs

mkdir ogg

uuzip 122022_ggs_Linux_x64_MySQL_64bit.zip

tar -xvf *tar -C ogg

(3) env.sh

su - ggs

touch env.sh

export OGG_HOME=$HOME/ogg

export PATH=PATH:OGG_HOME

export LD_LIBRARY_PATH=LD_LIBRARY_PATH:OGG_HOME

(4) 初始化ogg

su - ggs

source env.sh

cd ogg

./ggsci

===>执行:create subdirs

(5) 配置进程

su - ggs

source env.sh

cd ogg

./ggsci

===>执行:dblogin sourcedb gg1db@localhost:3306,userid gg1,password gg1;

===>执行:edit param mgr

===>输入:

port 7015

ACCESSRULE, PROG *, IPADDR *, ALLOW

===>保存退出

===>执行:edit param ext1

===>输入:

EXTRACT ext1

setenv (MYSQL_HOME="/usr/local/mysql5.7")

dboptions host 192.168.102.3, connectionport 3306

tranlogoptions altlogdest /usr/local/mysql5.7/data/mysql-bin.index

SOURCEDB gg1db@localhost:3306,userid gg1,PASSWORD gg1

EXTTRAIL ./dirdat/et

table gg1db.*;

===>保存退出

===>执行:edit parm pump1

===>输入:

EXTRACT pump1

SOURCEDB gg1db@localhost:3306,userid gg1,PASSWORD gg1

RMTHOST 192.168.102.3, MGRPORT 8015

RMTTRAIL ./dirdat/rt

table gg1db.*;

===>保存退出;

===>执行:add extract ext1, tranlog,begin now

===>执行:add exttrail ./dirdat/et, extract ext1

===>执行:add extract pump1, exttrailsource ./dirdat/et

===>执行:add rmttrail ./dirdat/rt,extract pump1

(6) 配置def

su - ggs

source env.sh

cd ogg

./ggsci

===>执行:edit param defgen

===>输入:

defsfile ./dirdef/defgen.def

sourcedb gg1db@localhost:3306,userid gg1,password gg1

table gg1db.*;

===>保存退出

生成defgen.def

退出ggsci;

执行:./defgen paramfile ./dirprm/defgen.prm

===》在dirdef目录下会生成一个defgen.def文件,需要将文件拷贝到目标端(ogg)下对应的dirdef目录下

2.3 目标端

(1) 建立ogg用户,并拷贝ogg包到ogg用户下

user add ogg

Passwd ogg -> ogg

chown -R ogg:ogg /home/ogg

(2) 解压到ogg目录下

su - ogg

mkdir ogg

uuzip OGG_BigData_Linux_x64_12.3.2.1.1.zip

tar -xvf *tar -C ogg

(3) env.sh

su - ogg

touch env.sh

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/java/jdk1.8.0_131/jre/lib/amd64/server/

export LD_LIBRARY_PATH=LD_LIBRARY_PATH:HOME/ogg

export JAVA_LIBDIR=/usr/share/java

(4) 初始化ogg

su - ogg

source env.sh

cd ogg

./ggsci

===>执行:create subdirs

(5) 配置进程

su - ogg

source env.sh

cd ogg

./ggsci

===>执行:edit param mgr

===>输入:

PORT 8015

ACCESSRULE, PROG *, IPADDR *, ALLOW

===>保存退出

===>执行:edit param rep1

===>输入:

replicat rep1

sourcedefs ./dirdef/defgen.def

TARGETDB LIBFILE libggjava.so SET property=./dirprm/kafka.props

MAP gg1db., TARGET gg1db.;

===>保存退出

===>执行:add replicat rep1, exttrail ./dirdat/rt (注意,这里的exttrail必须和源端的dump配置一致)

(6) kafka.props配置(dirprm目录下)

gg.handlerlist = kafkahandler

gg.handler.kafkahandler.type=kafka

gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties

#######The following resolves the topic name using the short table name

gg.handler.kafkahandler.topicMappingTemplate=tggtest #这个是定义的主题

############The following selects the message key using the concatenated primary keys

############gg.handler.kafkahandler.keyMappingTemplate=${primaryKeys}

###########gg.handler.kafkahandler.format=avro_op

gg.handler.kafkahandler.SchemaTopicName=tggtest ########定义的主题

gg.handler.kafkahandler.BlockingSend =false

gg.handler.kafkahandler.includeTokens=false

gg.handler.kafkahandler.mode=op

gg.handler.kafkahandler.format=json

#########gg.handler.kafkahandler.format.insertOpKey=I

#######gg.handler.kafkahandler.format.updateOpKey=U

#########gg.handler.kafkahandler.format.deleteOpKey=D

#######gg.handler.kafkahandler.format.truncateOpKey=T

goldengate.userexit.writers=javawriter

javawriter.stats.display=TRUE

javawriter.stats.full=TRUE

gg.log=log4j

gg.log.level=INFO

gg.report.time=30sec

##########Sample gg.classpath for Apache Kafka

gg.classpath=dirprm/:/usr/local/kafka/libs/*

##########Sample gg.classpath for HDP

#########gg.classpath=/etc/kafka/conf:/usr/hdp/current/kafka-broker/libs/*

javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar

(7) custom_kafka_producer.properties配置(dirprm目录下)

bootstrap.servers=localhost:9092

acks=1

reconnect.backoff.ms=1000

value.serializer=org.apache.kafka.common.serialization.ByteArraySerializer

key.serializer=org.apache.kafka.common.serialization.ByteArraySerializer

######## 100KB per partition

batch.size=16384

linger.ms=0

key.converter=org.apache.kafka.connect.json.JsonConverter

value.converter=org.apache.kafka.connect.json.JsonConverter

key.converter.schemas.enable=false

value.converter.schemas.enable=false

3 启动

3.1 非ogg程序

Mysql启动; 3306端口

Kafka启动; 9092端口

Zookeeper启动;2181端口

3.2 源端

Su - ggs

Source env.sh

Cd ogg

./ggsci

===>执行: start mgr

===>执行:start ext1

===>执行:start pump1

日志 ggserr.log

3.3 目标端

Su - ogg

Source env.sh

Cd ogg

./ggsci

===>执行: start mgr

===>执行:start rep1

TBD:如果源端频繁请求一个未知的端口,可能是dirdat的目录配置错误,亦或者可以在目标端下执行如下操作:

cd ogg

./servier -p 7819 (7819是源端ggserr中的端口)

日志 ggserr.log

3.4 检查

(1) Kafka 主题是否自动创建

Cd /usr/local/kakfa

./bin/kafka-topics.sh --list --zookeeper localhost:2181

如果出现tggtest->说明创建成果

(2) 在mysql源端插入或者更新数据,观察相关日志

源端:/home/ggs/ogg/dirdat/et00000*

目标端:/home/ogg/ogg/dirdat/rt0000*

(3) Kafka程序

-- coding:utf-8 --

import kafka

from kafka import KafkaConsumer

consumer = KafkaConsumer('tggtest', bootstrap_servers=['localhost:9092'])

for message in consumer:

print "%s:%d:%d: key=%s value=%s" %(message.topic, message.partition,message.offset, message.key,message.value)

接收到插入的消息

tggtest:0:65: key=gg1db.t1 value={"table":"gg1db.t1","op_type":"I","op_ts":"2019-05-20 22:26:24.000108","current_ts":"2019-05-20T22:26:30.252000","pos":"00000000000000008226","after":{"id":2,"name":"g"}}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容