2021-07-14 canal 部署

服务器环境

OS : CentOS Linux release 7.5.1804 (Core)
CPU: 4
MEM: 8g
JAVA: jdk1.8

canal 版本

canal.deployer: 1.1.4_with_updatedelete
canal.adapter: 1.1.4

离线安装

下载安装包

canal.deployer-1.1.4.tar.gz
canal.adapter-1.1.4_with_updatedelete.tar.gz

创建目录 并解压

mkdir -p /data1/canal_deployer
mkdir -p /data1/canal_adapter
tar zxvf canal.deployer-1.1.4.tar.gz -C /data1/canal_deployer
tar zxvf canal.adapter-1.1.4_with_updatedelete.tar.gz -C /data1/canal_adapte

mysql 和clickhouse间的数据同步

mysql ,clickhouse 版本

mysql: 8.0.11
clickhouse: 21.4.6

由于mysql ,clickhouse 版本 问题需要对canal jar包的更新

下载的jar包

httpclient-4.3.jar
httpcore-4.4.5.jar
clickhouse-jdbc-0.2.jar
mysql-connector-java-8.0.22.jar

更新替换adapter 的lib

放到 canal_adapter/lib 下,
chmod 777 httpclient-4.3.jar httpcore-4.4.5.jar clickhouse-jdbc-0.2.jar mysql-connector-java-8.0.22.jar
chmod 4777 httpclient-4.3.jar httpcore-4.4.5.jar clickhouse-jdbc-0.2.jar mysql-connector-java-8.0.22.jar
注:除了传统的读r、写w、执行x以外,还有Linux的文件特殊权限,他们分别是Set UID、Set GID、Sticky Bit三种,也就是多出来的那一位
Set UID,SUID
权值:4
符号:x --> s
特点:仅对可执行文件有效。
功能:可执行文件执行时,拥有文件所有者的权限。
案例:/usr/bin/passwd 权限为4755,普通用户可执行passwd命令时,对应的普通用户,随机秒变高富帅,获得了root权限,可以修改普通用户平常根本想都不敢想、无法修改的root拥有的/etc/shadow系统文件(如果/usr/bin/passwd 权限为755,则普通用户执行passwd的时候,会出现无权限修改root own的/etc/shadow文件的问题)

引用:https://www.cnblogs.com/zklidd/p/7100276.html

配置更改

上游mysql

# 在上游mysql上创建同步用户
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;

#在上游mysql ,配置文件配置
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

中间 canal配置

修改 deployer 的配置文件(一个实例配置一个instance)

vim canal_deployer/conf/example/instance.properties
===
canal.instance.master.address=10.50.133.81:3306 #上游mysql ip:port
canal.instance.mysql.slaveId=1234 #canal伪装成mysql从库的server_id(要唯一)
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8
===

修改 adapter 的配置文件

vim canal_adapter/conf/application.yml
===
#canal-server地址
canalServerHost: 127.0.0.1:11111
#mysql连接信息
      url: jdbc:mysql://10.50.133.81:3306/example?useUnicode=true
      username: canal
      password: canal
===

vim canal_adapter/conf/application.yml
===
      - name: rdb   #rdb类型
        key: mysql
        properties:
        #clickhouse数据看配置
          jdbc.driverClassName: ru.yandex.clickhouse.ClickHouseDriver
          jdbc.url: jdbc:clickhouse://127.0.0.1:8123/example
          jdbc.username: default
          jdbc.password:
===

vim canal_adapter/conf/rdb/mytest_user.yml
===
## Mirror schema synchronize config
dataSourceKey: defaultDS
destination: example
groupId: g1
outerAdapterKey: mysql
concurrent: true
dbMapping:
  #mirrorDb: true 可以同步DDL
  mirrorDb: true
  database: example
===

clickhouse,mysql同步数据前准备工作

新建与mysql同名库,在clickhouse执行

create database example;

全量同步每一张要同步的表,在clickhouse执行

create table t_org engine = MergeTree order by ID as select * from MySQL('10.50.133.81:3306','example', 't_org', 'sys','1234.Com') ;

#此种方法需要clickhouse支持mysql引擎,查看方法:
select name from system.build_options 
结果中包含USE_MYSQL,则支持。

一些要注意的问题

目标库特殊字符

目标库名称不支持中划线(-)

DDL同步

如果需要使用DDL同步能力,必须在rdb中配置mirroDb为true才可以。

alter 语句中不能有 NOT NULL, 主要是不能有NOT,如果存在的话会报错,
Caused by: java.lang.RuntimeException: ru.yandex.clickhouse.except.ClickHouseException: ClickHouse exception, code: 62, host: 127.0.0.1, port: 8123; Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 54 ('NOT'): NOT NULL DEFAULT ''. Expected one of: AFTER, CODEC, end of query, INTO OUTFILE, ALIAS, FIRST, TTL, Comma, SETTINGS, FORMAT, DEFAULT, MATERIALIZED, COMMENT, token (version 21.4.6.55 (official build))
github已经提了bug:
https://github.com/alibaba/canal/issues/3527

启动方式

启动 deployer

canal_deployer/bin/startup.sh

查看deployer 启动日志

root@CLICKHOUSE-TEST1:/data1/canal_deployer#tail -f logs/canal/canal.log
2021-05-13 10:14:58.893 [main] INFO  com.alibaba.otter.canal.deployer.CanalLauncher - ## set default uncaught exception handler
2021-05-13 10:14:58.928 [main] INFO  com.alibaba.otter.canal.deployer.CanalLauncher - ## load canal configurations
2021-05-13 10:14:58.940 [main] INFO  com.alibaba.otter.canal.deployer.CanalStarter - ## start the canal server.
2021-05-13 10:14:59.000 [main] INFO  com.alibaba.otter.canal.deployer.CanalController - ## start the canal server[10.50.132.48(10.50.132.48):11111]
2021-05-13 10:15:00.329 [main] INFO  com.alibaba.otter.canal.deployer.CanalStarter - ## the canal server is running now ......

查看deployer instance 的日志

root@CLICKHOUSE-TEST1:/data1/canal_deployer#tail -f logs/example/example.log
2021-05-13 10:15:00.275 [main] INFO  c.a.otter.canal.instance.spring.CanalInstanceWithSpring - start CannalInstance for 1-example 
2021-05-13 10:15:00.287 [main] WARN  c.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert - --> init table filter : ^.*\..*$
2021-05-13 10:15:00.287 [main] WARN  c.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert - --> init table black filter : ^mysql\.slave_.*$
2021-05-13 10:15:00.292 [main] INFO  c.a.otter.canal.instance.core.AbstractCanalInstance - start successful....
2021-05-13 10:15:00.391 [destination = example , address = /10.50.133.81:3306 , EventParser] WARN  c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> begin to find start position, it will be long time for reset or first position
2021-05-13 10:15:00.392 [destination = example , address = /10.50.133.81:3306 , EventParser] WARN  c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - prepare to find start position just show master status
2021-05-13 10:15:01.674 [destination = example , address = /10.50.133.81:3306 , EventParser] WARN  c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> find start position successfully, EntryPosition[included=false,journalName=mysql-bin.000034,position=4,serverId=8,gtid=<null>,timestamp=1620697739000] cost : 1269ms , the next step is binlog dump

启动 adapter

canal_adapter/bin/startup.sh

查看adapter 的日志

tail -f logs/adapter/adapter.log
2021-05-13 16:24:10.541 [main] ERROR com.alibaba.druid.pool.DruidDataSource - testWhileIdle is true, validationQuery not set
2021-05-13 16:24:10.693 [main] INFO  com.alibaba.druid.pool.DruidDataSource - {dataSource-2} inited
2021-05-13 16:24:10.698 [main] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterLoader - Load canal adapter: rdb succeed
2021-05-13 16:24:10.706 [main] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterLoader - Start adapter for canal instance: example succeed
2021-05-13 16:24:10.707 [main] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterService - ## the canal client adapters are running now ......
2021-05-13 16:24:10.709 [Thread-4] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterWorker - =============> Start to connect destination: example <=============
2021-05-13 16:24:10.712 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8081"]
2021-05-13 16:24:10.716 [main] INFO  org.apache.tomcat.util.net.NioSelectorPool - Using a shared selector for servlet write/read
2021-05-13 16:24:10.738 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8081 (http) with context path ''
2021-05-13 16:24:10.741 [main] INFO  c.a.otter.canal.adapter.launcher.CanalAdapterApplication - Started CanalAdapterApplication in 3.753 seconds (JVM running for 4.295)
2021-05-13 16:24:10.822 [Thread-4] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterWorker - =============> Start to subscribe destination: example <=============
2021-05-13 16:24:10.878 [Thread-4] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterWorker - =============> Subscribe destination: example succeed <=============
2021-05-13 16:24:11.026 [pool-8-thread-1] INFO  c.a.o.canal.client.adapter.logger.LoggerAdapterExample - DML: {"data":null,"database":"example","destination":"example","es":1620884372000,"groupId":null,"isDdl":true,"old":null,"pkNames":null,"sql":"create database example","table":"","ts":1620894250944,"type":"QUERY"}
=== 
testWhileIdle is true, validationQuery not set
验证数据库连接是否正常,不重要
===
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容