主要实现思路 1、在clickhouse中创建MySQL引擎表。 2、根据MySQL引擎表的信息创建目标表。 3、实现canal实时增量同步MySQL数据到clickhouse。 MySQL 的准备 修改配置文件开启 Binlog [root@hadoop100 module]$ sudo vim ...
主要实现思路
- 1、在clickhouse中创建mysql引擎表。
- 2、根据mysql引擎表的信息创建目标表。
- 3、实现canal实时增量同步mysql数据到clickhouse。
mysql 的准备
修改配置文件开启 binlog
[root@hadoop100 module]$ sudo vim /etc/my.cnf
server-id=1
log-bin=mysql-bin
binlog_format=row
binlog-do-db=test
- 注意:binlog-do-db 根据自己的情况进行修改,指定具体要同步的数据库,如果不配置则表示所有数据库均开启 binlog。
mysql中需要同步的库表
mysql [testck]> show databases;
+--------------------+
| database |
+--------------------+
| information_schema |
| innodb |
| mysql |
| performance_schema |
| sys |
| testck |
| tmp |
+--------------------+
11 rows in set (0.00 sec)
mysql [testck]> use testck;
reading table information for completion of table and column names
you can turn off this feature to get a quicker startup with -a
database changed
mysql [testck]> show tables;
+------------------+
| tables_in_testck |
+------------------+
| t_organization |
| t_user |
+------------------+
2 rows in set (0.00 sec)
mysql [testck]>
clickhouse 的准备
- canal实时同步mysql的数据需要在clickhouse中提前建好库表
在clickhouse建mysql引擎的库
- 把mysql某个库中的所有表结构信息映射到clickhouse中,这样在clickhouse中就可以远程操作mysql。
cnnxpredn02 :) create database t_tmp engine = mysql('ip:3306', 'testck', 'user', 'pass');
create database t_tmp
engine = mysql('ip:3306', 'testck', 'user', 'pass')
query id: 9f6d7179-3c97-47c2-93ea-abc0c6ca873b
ok.
0 rows in set. elapsed: 0.013 sec.
cnnxpredn02 :) show databases;
show databases
query id: 5b5baaf5-86f5-46c1-ac34-2618c34462f1
┌─name────┐
│ default │
│ system │
│ t_tmp │
└─────────┘
3 rows in set. elapsed: 0.009 sec.
cnnxpredn02 :)
创建clickhouse中的库
cnnxpredn02 :) create database testck;
create database testck
query id: 397261c0-a8f0-48c6-b4f6-71d121b975b8
ok.
0 rows in set. elapsed: 0.004 sec.
cnnxvopredn02 :) show databases;
show databases
query id: f467f4bb-99fa-4322-a3c1-e33be74b6e81
┌─name────┐
│ default │
│ system │
│ t_tmp │
│ testck │
└─────────┘
4 rows in set. elapsed: 0.002 sec.
cnnxvpredn02 :)
根据创建的mysql引擎表创建clickhouse目标表结构
cnnxvpredn02 :) create table testck.t_organization as t_tmp.t_organization;
:-] create table testck.t_user as t_tmp.t_user;
create table testck.t_organization as t_tmp.t_organization
query id: f942cf5d-701f-4dbd-9ffd-de2206eec851
ok.
0 rows in set. elapsed: 0.006 sec.
create table testck.t_user as t_tmp.t_user
query id: ef7dddd7-64b2-4dbc-88be-a105b49aff57
ok.
0 rows in set. elapsed: 0.004 sec.
cnnxvopredn02 :)
canal 的下载和安
下载并解压 jar 包
mkdir /opt/module/canal
tar -zxvf canal.deployer-1.1.2.tar.gz -c /opt/module/canal
修改 canal.properties 的配置
#################################################
######### common argument #############
#################################################
# tcp bind ip
canal.ip =
# register ip to zookeeper
canal.register.ip =
canal.port = 11111
canal.metrics.pull.port = 11112
# canal instance user/passwd
# canal.user = canal
# canal.passwd = e3619321c1a937c46a0d8bd1dac39f93b27d4458
# canal admin config
#canal.admin.manager = 127.0.0.1:8089
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd = 4acfe3202a5ff5cf467898fc58aab1d615029441
# admin auto register
#canal.admin.register.auto = true
#canal.admin.register.cluster =
#canal.admin.register.name =
canal.zkservers =
# flush data to zk
canal.zookeeper.flush.period = 1000
canal.withoutnetty = false
# tcp, kafka, rocketmq, rabbitmq
canal.servermode = tcp
# flush meta cursor/parse position to file
canal.file.data.dir = ${canal.conf.dir}
canal.file.flush.period = 1000
## memory store ringbuffer size, should be math.pow(2,n)
......
- 说明:这个文件是canal的基本通用配置,canal端口号默认就是 11111,修改canal的输出model,默认tcp,改为输出到 kafka多实例配置如果创建多个实例,通过前面canal架构,我们可以知道,一个canal服务中可以有多个instance,conf/下的每一个example即是一个实例,每个实例下面都有独立的配置文件。默认只有一个实例example,如果需要多个实例处理不同的 mysql 数据的话,直接拷贝出多个 example,并对其重新命名,命名和配置文件中指定的名称一致,然后修改
canal.properties 中的 canal.destinations=实例 1,实例 2,实例 3。
#################################################
######### destinations #############
#################################################
canal.destinations = example
修改 instance.properties
配置 mysql 服务器地址
#################################################
## mysql serverid , v1.0.26+ will autogen
canal.instance.mysql.slaveid=20
# enable gtid use true/false
canal.instance.gtidon=false
# position info
canal.instance.master.address=hadoop100:3306
配置连接 mysql 的用户名和密码,默认就是我们前面授权的 canal
# username/password
canal.instance.dbusername=canal
canal.instance.dbpassword=canal
canal.instance.connectioncharset = utf-8
canal.instance.defaultdatabasename =test
# enable druid decrypt database password
canal.instance.enabledruid=false
启动服务
bin/startup.sh
[root@cnnxpredn02 canal]# cat canal.log
2022-03-07 08:47:21.349 [main] info com.alibaba.otter.canal.deployer.canallauncher - ## set default uncaught exception handler
2022-03-07 08:47:21.398 [main] info com.alibaba.otter.canal.deployer.canallauncher - ## load canal configurations
2022-03-07 08:47:21.415 [main] info com.alibaba.otter.canal.deployer.canalstarter - ## start the canal server.
2022-03-07 08:47:21.475 [main] info com.alibaba.otter.canal.deployer.canalcontroller - ## start the canal server):11111]
2022-03-07 08:47:23.137 [main] info com.alibaba.otter.canal.deployer.canalstarter - ## the canal server is running now ......
canal-adapter 的下载和安装
下载并解
在application.yml中配置mysql和clickhouse的连接信息
...
# srcdatasources:
defaultds:
url: jdbc:mysql://ip:3306/database?useunicode=true
username: user
password: pass
canaladapters:
- instance: test # canal instance name or mq topic name
groups:
- groupid: g1
outeradapters:
- name: logger
- name: rdb
key: mysql1
properties:
jdbc.driverclassname: ru.yandex.clickhouse.clickhousedriver
jdbc.url: jdbc:clickhouse://ip:port/database
jdbc.username: user
jdbc.password: pass
# - name: rdb
...
在/opt/soft/canal-adapter/conf/rdb/mytest_user.yml中配置需要同步的库表信息
- canal可以同步整个库的所有表和单表的表,配置都在这里进行配置,如果需要同步多张表的数据,就在rdb下创建多个类似的配置文件,文件名可以用表名来命名。
mirror schema synchronize config
datasourcekey: defaultds
destination: test
groupid: g1
outeradapterkey: mysql1
concurrent: true
dbmapping:
mirrordb: true
database: testck
启动canal-adapter服务
bin/startup.sh
- 在/.../canal-adapter/logs/adapter下查看日志
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论